std :: max和std :: min - 这是正确的程序吗?

时间:2014-02-23 15:20:27

标签: c++ c++11 stl

基本上,我有一个2D向量std::vector<std::vector<double> >,我试图找到它的最小值和最大值。我计算如下:

std::vector<std::vector<double> > var; 

auto max = *std::max_element(std::begin(var), std::end(var));
auto min = *std::min_element(std::begin(var), std::end(var));

这会产生2个1D向量,现在对于最大值,显而易见的是我采用了最大元素。但是最小元素呢?我已经尝试了max和min,发现max找到了正确的答案,但为什么呢?这是一个例子:

double max = *std::max_element(std::begin(max), std::end(max));
double min = *std::min_element(std::begin(min), std::end(min));

结果:

Max: 0.0849917
Min: 7.86827e-09

这是否正确,或者,这是完成此任务的错误方法吗?

编辑:

通过实施其中一条评论中给出的答案:

struct column_comparer
{
    int column_num;
    column_comparer(int c) : column_num(c) {}

    bool operator()(const std::vector<double> & lhs, const std::vector<double> & rhs) const
    {
        return lhs[column_num] < rhs[column_num];
    }
};

std::vector<std::vector<double> >v = {
        {1, 4, 6, 70},
        {0, 1, 2, 4}

    };

    int c = 2;

    int n = (*std::max_element(v.begin(), v.end(), column_comparer(c)))[c];

我想要做的是找到整个矢量中的最大数字..在这种情况下,它将是70

0 个答案:

没有答案