首页 > 解决方案 > 如何获得 2D std::vector 的给定列的最大值?

问题描述

我知道如何获取 2D std::vector 行的最大值,如下所示:

std::vector<std::vector<int>> a = {{ 1, 45, 54}, {71, 76, 12 }, {74451, 756, 125 }};}

std::cout << " The max value of row 0 is: " << *max_element(begin(a[0]), end(a[0]));

你如何调用 max_element 来获取二维向量列的最大值?(不将列复制到一维向量中)

谢谢!

标签: c++vector

解决方案


您可以做的是提供std::max_element一个用户定义的比较器,该比较器通过要搜索的所需列中的值std::vector<int>来比较每个值。a

像这样:

std::vector<std::vector<int>> a = {{ 1, 45, 54}, {71, 76, 12 }, {74451, 756, 125 }};

std::cout << " The max value of row 0 is: " << *max_element(begin(a[0]), end(a[0])) << '\n';

auto max_col_0 = (*std::max_element(begin(a), end(a), [](auto& a, auto& b){ return a[0] < b[0]; }))[0];
auto max_col_1 = (*std::max_element(begin(a), end(a), [](auto& a, auto& b){ return a[1] < b[1]; }))[1];

std::cout << " The max value of col 0 is: " << max_col_0 << '\n';
std::cout << " The max value of col 1 is: " << max_col_1 << '\n';

这里调用 llambda 函数并使用两个std::vector<int>对象进行比较,您需要比较正在搜索的给定列中的值。解析auto类型将为比较器提供以下信息:

[](std::vector<int>& a, std::vector<int>& b){ return a[1] < b[1]; }

该函数使用每个vector存储的向量std::max_element调用比较器,以便可以比较每个向量中的相关列,哪个较小。 a

返回的迭代器是std::vector<int>您在取消引用迭代器后需要从中提取获胜列的获胜者。


推荐阅读