首页 >后端开发 >C++ >如何在 C 中根据第二个元素对向量对进行排序?

如何在 C 中根据第二个元素对向量对进行排序?

Susan Sarandon
Susan Sarandon原创
2024-12-10 21:48:14551浏览

How to Sort Vectors of Pairs Based on Their Second Elements in C  ?

根据第二个元素对向量对进行排序

给定一个向量对,人们可能希望根据它们的升序排列它们第二个要素。在构造自定义函数对象完成此任务的同时,让我们探讨一下标准模板库 (STL) 是否为我们提供了更方便的方法。

使用自定义比较器

第三种std::sort 的参数允许指定自定义比较器函数。我们可以如下定义:

struct sort_pred {
    bool operator()(const std::pair<int, int>& left, const std::pair<int, int>& right) {
        return left.second < right.second;
    }
};

std::sort(v.begin(), v.end(), sort_pred());

在 C 11 及以上版本中使用 Lambda

在 C 11 及更高版本中,lambda 提供了一种紧凑的替代方案:

std::sort(v.begin(), v.end(), [](const std::pair<int, int>& left, const std::pair<int, int>& right) {
    return left.second < right.second;
});

利用模板灵活性

为了提高可重用性,可以定义一个基于模板的比较器:

template <class T1, class T2, class Pred = std::less<T2>>
struct sort_pair_second {
    bool operator()(const std::pair<T1, T2>& left, const std::pair<T1, T2>& right) {
        Pred p;
        return p(left.second, right.second);
    }
};

这可以提供更大的灵活性:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

以上是如何在 C 中根据第二个元素对向量对进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn