C++ 中向量 的 ArgMin?

2024-03-28

我想找到indexC++ 中的最小值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() );

它返回一个迭代器,指向迭代器范围中的最小元素。因为您想要一个索引并且您正在使用vectors,然后您可以从中减去结果迭代器vec.begin()来得到这样的索引。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中向量 的 ArgMin? 的相关文章

随机推荐