C++ 最流行的计算最小值的方法是什么?

C++ 最流行的计算最小值的方法是什么?,c++,boost,c++14,min,C++,Boost,C++14,Min,我想使用自定义比较器计算一组值中的最小值。目前,我的代码大致如下所示: SomeStructure best; for (int i = 0; i < 100; ++i) { SomeStructure cur = getValue(i); if (isLess(cur, best)) { best = cur; } } SomeStructure最佳; 对于(int i=0;i

我想使用自定义比较器计算一组值中的最小值。目前,我的代码大致如下所示:

SomeStructure best;
for  (int i = 0; i < 100; ++i)
{
    SomeStructure cur = getValue(i);
    if (isLess(cur, best))
    {
        best = cur;
    }
}
SomeStructure最佳;
对于(int i=0;i<100;++i)
{
SomeStructure cur=getValue(i);
如果(无(当前,最佳))
{
最佳=cur;
}
}
我觉得这种方式不是很明确。例如,如果我使用标准比较器,我可以写得更漂亮:

accumulator_set<SomeStructure, stats<tag::min>> min;
for (int i = 0; i < 100; ++i))
{
  min(getValue(i));
}
extract::min(min);
蓄能器设置最小值;
对于(int i=0;i<100;++i))
{
min(getValue(i));
}
提取物:min(min);
因此,问题是:如何编写类似于第二个示例的内容,但使用自定义比较器?
我的项目使用
C++14
boost
,因此解决方案可以使用它们的功能。
C++17
很有趣,但不是很有用

更新:看起来我在这个问题上不是很准确

  • getValue
    是一个复杂的函数,它计算给定索引的某个值,而不仅仅是从容器中检索该值
  • 我可以将所有数据存储在容器中,然后只使用
    std::min_element
    ,但我确信有任何显式方法不需要这样做

如果要比较
初始值设定项列表中包含的两个元素或一组元素以及自定义比较器,可以使用
std::min

有关更多详细信息,请参阅。还有很多例子。

否则,您可以对范围使用
std::min_元素
。文件

编辑

据我从您的问题/评论中了解,您没有可以迭代的容器,而是希望比较一组不相关的值。
下面是一个示例,文档中提供的示例略有减少:

std::min( { "foo", "bar", "hello" },
    [](const std::string& s1, const std::string& s2) {
        return s1.size() < s2.size();
    });
std::min({“foo”,“bar”,“hello”},
[](常量标准::字符串和s1,常量标准::字符串和s2){
返回s1.size()
改用变量,动态创建初始值设定项列表,不再需要容器

编辑2

关于问题的更新,它遵循一个可能的解决方案。
在迭代整个集合时,可以一次比较两个元素。例如,将第一个元素放在一个名为
min
的变量中,然后对每个后续元素将
min
与当前正在阐述的元素进行比较,如果前者大于后者,则更新
min
变量。

当迭代结束时,您已经用您正在寻找的元素正确地设置了
min
。在这种情况下,使用自定义比较器的
std::min
似乎是最好的解决方案。

只需使用
std::min
,类似于(假设您已经定义了带有lambda的
操作符
std::min_元素
,Dior Dahling,Dior.-@Bathsheba,要使用
std::min_元素
我应该将所有数据存储在一个容器中。有什么办法可以避免这种情况吗?@alexeykuzmin0这也适用于C风格的数组<代码>整数arr[大小];std::min_元素(arr,arr+size,[](){/*您的lambda*/})
据我所知,要使用
std::min_元素
我应该将所有数据存储在一个容器中。有什么方法可以避免这种情况吗?@alexeykuzmin0您可以使用
std::min
并通过初始值设定项列表提交您的值,请参阅链接文档。请您详细解释一下,我如何动态创建初始值设定项列表?我有太多的值,不能只写
{getValue(0),getValue(1),…}
@alexeykuzmin0什么是
getValue
?我看你的例子中没有定义。如果它从容器中获取值(例如,从
向量
),则使用它及其成员方法
cbegin
/
cend
。不幸的是,您的示例不是MVCE,因此很难说如何准确地执行。在我的问题中,我有一个包含大量对象的3D场景,
getValue
在给定索引器的情况下计算该场景的一些统计信息。它包含数百行。这就是为什么我上面的示例包含函数调用,而不是迭代器解引用。抱歉说得不太准确。
SomeStructure best;
for  (int i = 0; i < 100; ++i)
    best = std::min(best, getValue(i));