Mi piacerebbe trovare l'indice del valore minimo in un C++ std::vector<double>
. Ecco un'implementazione un po 'prolissa di questo:ArgMin per il vettore <double> in 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;
}
(. Fammi sapere se notate eventuali errori di cui sopra implementazione ho provato, ma il mio test non è affatto esaustivo.)
Penso che la sopra l'implementazione è probabilmente una reinvenzione delle ruote; Mi piacerebbe usare il codice integrato, se possibile. C'è una chiamata a una linea a una funzione STL per questo? Oppure qualcuno può suggerire un'implementazione più concisa?
'std :: min_element' non" restituisce tutti i minuti ". Restituisce un iteratore all'elemento più piccolo dell'intervallo. Se il minimo si verifica più volte, l'iteratore punta al primo. Il tuo 'mins [0]' dovrebbe probabilmente essere '* mins' dato che è un iteratore, non una serie di risultati. – Blastfurnace