c++ - std::min_element 返回意外结果

标签 c++ c++11 min c++-standard-library

我想找到一个 vector 的最小值:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main () {
    vector<double> v{2, 0, 4};
    double minT = *std::min_element(v.begin(), v.end(),
                                    [](double i1, double i2) {
                                        std::cout << "Comparing: " << i1 << "  " << i2 << "   " << ((i1 < i2)? i1:i2) << "    " << '\n';
                                        return (i1 < i2)? i1:i2;
                                    });
    cout << "Minimum is: " << minT << '\n';
}

但是这段代码的输出是:

Comparing: 0  2   0    
Comparing: 4  2   2    
Minimum is: 4

我做错了什么?那里有任何未定义的行为吗?

注意:我知道我不需要 lambda 函数。删除它会返回预期结果 (0),但我的目标是拥有一个不考虑零的个性化最小函数。

最佳答案

如果第一个参数小于第二个参数,比较器需要返回 true,而不是两个值中较小的一个。所以返回语句应该只是

return i1 < i2;

关于c++ - std::min_element 返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947119/

相关文章:

c++ - 关于 Direct2D 绘图调用中的多线程

c++ - SHFileOperation 无法删除文件夹

c++ - 带有 char* 构造函数的异常类

pandas - pandas 中嵌套 groupby 的 min() 操作

C++在数组中查找最大(按行)和最小(按列)元素

c++ - 英特尔 C++ 编译器无法处理深度模板?

c++ - 覆盖 >> 像 int 这样的运算符

c++ - 将方法的替代实现 (SFINAE) 移动到单独的文件

c++ - 如何更改(向前/向后移动)基于范围的 for 循环中的迭代器?

python - 如何确定列表中的几个最小值?