std :: min_element返回意外结果

时间:2015-03-09 16:31:40

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

我想找到一个矢量的最小值:

#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),但我的目标是拥有一个不考虑零的个性化min函数。

1 个答案:

答案 0 :(得分:16)

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

return i1 < i2;