我的问题如下:
给定一个容器 X = {x1, x2, ...,xn} 和一个函数 f
,找到值f(xi)达到最小值的索引i
。
当然,我可以从头开始实现它,但我感觉自己发明了一辆自行车,所以我正在寻找使用标准或 boost 算法的较短代码。我能得到的最好的是
template <typename Val>
Val f(Val)
{
.........
}
template <typename It>
It find_minimum(It begin, It end)
{
return std::min_element(begin, end,
[](typename It::value_type val1, typename It::value_type val2)
{
return f(val1) < f(val2);
});
}
但是它遇到了 f
被计算 2N-1 次的问题。
最佳答案
就用这个算法(伪代码,没时间弄模板正确)
It element= X.first()
Val min = f(element)
It min_el = element
while(element= element.next())
{
Val temp = f(element);
if( min > temp)
{
min_el = element;
min = temp;
}
}
return min_el
关于c++ - 用于查找 f(Xi) 的最小值的索引的标准或 boost 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623687/