我想找到C ++ std::vector<double>
中最小值的索引。这是一个有点冗长的实现:
//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;
}
(如果您发现上述实施中有任何错误,请告诉我。我对其进行了测试,但我的测试并非详尽无遗。)
我认为上述实施可能是重新发明的;如果可能的话,我想使用内置代码。是否对STL函数进行单行调用?或者,有人可以建议更简洁的实施吗?
答案 0 :(得分:17)
您可以使用标准min_element
功能:
std::min_element( vec.begin(), vec.end() );
它将迭代器返回到迭代器范围中的最小元素。由于您需要索引并且正在使用vector
,因此可以从vec.begin()
中减去生成的迭代器以获得此类索引。
如果需要自定义比较,函数或函数对象会有额外的重载。