如何在任一轴的 std::vector<std::pair<int, int>> 上找到 std::max_element?
How to find std::max_element on std::vector<std::pair<int, int>> in either of the axis?
如何在任一轴中找到这对 std::vector<std::pair<int, int>>
中的最大元素。
假设这是样本对:
0, 1
0, 2
1, 1
1, 2
1, 4
2, 2
3, 1
我尝试使用 std::minmax_element()
:
const auto p = std::minmax_element(edges.begin(), edges.end());
auto max = p.second->first;
但这只生成第一列的最大元素,即 3
,但我想要任一列的最大元素,即 4
。
我希望最大元素是任一列中的最高元素。
您需要提供将为您的项目定义 "less" 关系的谓词:
const auto p = std::minmax_element(
edges.begin(), edges.end(),
[](const auto& a, const auto& b) {
// provide relation less you need, example:
return std::max(a.first, a.second) < std::max(b.first, b.second);
});
默认情况下(在您的代码中)使用 less 运算符。对于 std::pair
它适用于元素的字典顺序(如果第一个元素较少 returns 如果它们相等则为真检查 second
元素如果较少)。
将 std::max_element 与自定义比较函数结合使用,例如:
auto max_pair = *std::max_element(std::begin(edges), std::end(edges),
[](const auto& p1, const auto& p2) {
return std::max(p1.first, p1.second) < std::max(p2.first, p2.second);
});
int max = std::max(max_pair.first, max_pair.second);
如何在任一轴中找到这对 std::vector<std::pair<int, int>>
中的最大元素。
假设这是样本对:
0, 1
0, 2
1, 1
1, 2
1, 4
2, 2
3, 1
我尝试使用 std::minmax_element()
:
const auto p = std::minmax_element(edges.begin(), edges.end());
auto max = p.second->first;
但这只生成第一列的最大元素,即 3
,但我想要任一列的最大元素,即 4
。
我希望最大元素是任一列中的最高元素。
您需要提供将为您的项目定义 "less" 关系的谓词:
const auto p = std::minmax_element(
edges.begin(), edges.end(),
[](const auto& a, const auto& b) {
// provide relation less you need, example:
return std::max(a.first, a.second) < std::max(b.first, b.second);
});
默认情况下(在您的代码中)使用 less 运算符。对于 std::pair
它适用于元素的字典顺序(如果第一个元素较少 returns 如果它们相等则为真检查 second
元素如果较少)。
将 std::max_element 与自定义比较函数结合使用,例如:
auto max_pair = *std::max_element(std::begin(edges), std::end(edges),
[](const auto& p1, const auto& p2) {
return std::max(p1.first, p1.second) < std::max(p2.first, p2.second);
});
int max = std::max(max_pair.first, max_pair.second);