C++中矢量的参数<double>?

ArgMin for vector<double> in C++?

本文关键字:lt gt double 参数 C++      更新时间:2023-10-16

>我想在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 函数的单行调用?或者,有人可以建议更简洁的实现吗?

您可以使用

标准的min_element函数:

std::min_element( vec.begin(), vec.end() );
它将迭代器

返回到迭代器范围内的最小元素。由于你想要一个索引并且正在使用vector,因此您可以从vec.begin()中减去生成的迭代器以获得这样的索引。

如果需要自定义比较,函数或函数对象还有一个额外的重载。