Tôi muốn tìm chỉ số của giá trị nhỏ nhất trong C++ std::vector<double>
. Dưới đây là một việc thực hiện phần nào tiết về điều này:ArgMin cho vector <double> trong 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;
}
(. Hãy cho tôi biết nếu bạn nhận thấy bất kỳ sai lầm trong việc thực hiện trên, chúng tôi đã thử nghiệm nó, nhưng thử nghiệm của tôi là không phải ở tất cả đầy đủ.)
Tôi nghĩ rằng việc thực hiện trên có thể là sự tái tạo bánh xe; Tôi muốn sử dụng mã tích hợp nếu có thể. Có một cuộc gọi một dòng đến một chức năng STL cho điều này? Hoặc, ai đó có thể đề xuất triển khai ngắn gọn hơn không?
'std :: min_element' không" trả về tất cả phút ". Nó trả về một iterator cho phần tử nhỏ nhất trong phạm vi. Nếu giá trị tối thiểu xảy ra nhiều lần thì trình vòng lặp sẽ trỏ đến điểm đầu tiên. 'Phút [0]' của bạn có thể là '* phút' vì nó là một trình lặp, không phải là một mảng kết quả. – Blastfurnace