首页 >后端开发 >C++ >如何按第二个元素对向量对进行有效排序?

如何按第二个元素对向量对进行有效排序?

Linda Hamilton
Linda Hamilton原创
2024-12-09 13:47:24926浏览

How to Efficiently Sort a Vector of Pairs by the Second Element?

如何通过 Pair 的第二个元素对向量对进行高效排序

本文解决了基于对的向量对向量进行排序的问题每对的第二个元素按升序排列。虽然为此任务创建自定义函数对象是一个可行的解决方案,但还有利用现有 STL 组件和 std::less 的替代方法。

将 std::sort 与自定义比较器一起使用

一种方法是使用自定义比较器作为 std::sort 的可选第三个参数。这个自定义比较器称为 sort_pred,定义如下:

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

要使用此比较器,只需将其传递给 std::sort:

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> &amp;left, const std::pair<int,int> &amp;right) {
    return left.second < right.second;
});

使用通用模板进行对排序

为了获得更大的灵活性和可重用性,您可以创建一个名为 sort_pair_second 的通用模板:

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

使用此模板,您可以实现所需的排序:如下:

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

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

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