基本上,我有一个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