如何在任一轴的std :: vector <std :: pair <int,int =“” >>上找到std :: max_element?

时间:2019-05-22 11:22:13

标签: c++ algorithm std stdvector

如何在两个轴中的任一对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的max元素,但是我想要任一列即4的max元素。

我希望max元素成为任一列中的最高元素。

2 个答案:

答案 0 :(得分:9)

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);

答案 1 :(得分:6)

您需要提供谓词,该谓词将为您的商品定义“较少”关系:

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);
});

默认情况下(在您的代码中)使用较少的运算符。对于std::pair,它按元素的字典顺序排序(如果第一个元素较少,则它们相等,如果相等则检查second元素,则返回true。