Me gustaría encontrar el índice del valor mínimo en un C++ std::vector<double>
. He aquí una aplicación un tanto detallado de esta:ArgMin para el vector <double> en C++?
//find index of smallest value in the vector
int argMin(std::vector<double> vec)
{
std::vector<double>::iterator mins = std::min_element(vec.begin(), vec.end()); //returns all mins
double min = mins[0]; //select the zeroth min if multiple mins exist
for(int i=0; i < vec.size(); i++)
{
//Note: could use fabs((min - vec[i]) < 0.01) if worried about floating-point precision
if(vec[i] == min)
return i;
}
return -1;
}
(. Avísame si nota cualquier error en la ejecución por encima de lo probé, pero mis pruebas no es en absoluto exhaustiva.)
Creo que la la implementación anterior es probablemente una reinvención de la rueda; Me gustaría utilizar el código incorporado si es posible. ¿Hay una llamada de una línea a una función de STL para esto? O, ¿alguien puede sugerir una implementación más concisa?
'std :: min_element' no" devuelve todos los minutos ". Devuelve un iterador al elemento más pequeño en el rango. Si el mínimo ocurre varias veces, el iterador apunta al primero. Su 'mins [0]' debería ser '* mins' ya que es un iterador, no una matriz de resultados. – Blastfurnace