我想在C++ std::vector<double>
中找到最小值的索引。這裏是一個有點繁瑣實現這一點:ArgMin for vector <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;
}
(讓我知道你是否注意到在上述實施任何錯誤我測試了,但我的測試是不是在所有詳盡。)
我覺得以上的實施可能是一個車輪改造;如果可能,我想使用內置代碼。是否有爲此而對STL函數進行單行調用?或者,有人可以建議一個更簡潔的實施?
'std :: min_element'不會「返回所有分鐘」。它將一個迭代器返回到範圍中的最小元素。如果最小值出現多次,則迭代器指向第一個。你的'mins [0]'應該是'* mins',因爲它是一個迭代器,而不是一個結果數組。 – Blastfurnace