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

如何根据 C 中的第二个元素对向量对进行自定义排序?

DDD
DDD原创
2024-12-13 12:12:10504浏览

How to Custom Sort a Vector of Pairs Based on the Second Element in C  ?

对向量的自定义排序

考虑要对向量对进行排序的场景 (

std::向量<:pair int>>
)基于每对中的第二个元素按升序排列。

要在不实现单独的函数对象的情况下实现此目的,您可以利用

std::sort
的第三个参数,它接受自定义比较器。此比较器使用提供的比较器根据第二个元素比较两对。

例如,使用 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;
});

或者,定义一个重载

operator()
的自定义结构体函数来执行比较:
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());

如果您想要一个可以与不同类型和比较器重用的通用解决方案,请创建一个如下模板:

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