c++ - 如何获得 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 来获取二维向量列的最大值?(不将列复制到一维向量中)
谢谢!
解决方案
您可以做的是提供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>
您在取消引用迭代器后需要从中提取获胜列的获胜者。
推荐阅读
- sqlite - 连接 SQLite 表
- python - Python whois 转换为 exe 后失败
- javascript - 页面加载后不久调用函数,一旦从控制器收到结果
- python - 如何删除在python列表中的多个项目中重复的文本?
- java - Apache Poi、Xades Signature 添加时间戳撤销信息
- php - 如何解决我的数据不显示的问题?
- r - 循环遍历 R 中的多个数据帧
- azure-functions - Azure Function App 查询中出现非法字符
- c - 动态数组分配仅返回所有索引中的最后一个元素 C
- javascript - React 中组件的 CSS 究竟是什么时候加载/应用的?