c++ - 用于查找 f(Xi) 的最小值的索引的标准或 boost 算法

标签 c++ algorithm boost

我的问题如下: 给定一个容器 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/

相关文章:

c++ - 比较代码算法/片段的最正确(最好)的方法是什么?

c++ - 编译期间链接到 boost 库失败

c++ - cmake 找不到使用 vcpkg 安装的库

c++ - 统一哈希函数

c++ - 汉明距离 : Incorrect Count

c++ - 递归函数有效,但无法内存

algorithm - 一个非常大的阶乘的最后一个非零数字

sql - 在 PostgreSQL 中创建最佳图形关系

c# - 检查时间范围是否在 C# 中相交

c++ - boost 日志,为什么不打印 threadid 和 processid