对pair优先队列如何使小值先出队列 即按pair第一个元素排序 小的先出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对pair优先队列如何使小值先出队列 即按pair第一个元素排序 小的先出相关的知识,希望对你有一定的参考价值。

typedef pair<int,int> pii;
priority_queue<pii> Q;
STL这东西用的还不是很熟悉 求帮助。。。

参考技术A typedef pairpii;
priority_queue<pii, vector, yourcomparison> Q;

//yourcomparison @@@@I'm not sure if it's reference here, you can try it yourself
bool yourcomparison(const pii& p1, const pii& p2)
return p1.first < p2.first;
参考技术B typedef pair<int, int>pii;
priority_queue<pii, vector<pii>, yourcomparison> Q;

//yourcomparison @@@@I'm not sure if it's reference here, you can try it yourself
bool yourcomparison(const pii& p1, const pii& p2)
return p1.first < p2.first;
参考技术C typedef pair<int, int>pii;
priority_queue<pii, vector<pii>, yourcomparison> Q;

//yourcomparison @@@@I'm not sure if it's reference here, you can try it yourself
bool yourcomparison(const pii& p1, const pii& p2)
return p1.first < p2.first;
本回答被提问者采纳
参考技术D

默认的是先把 pair 的第一位作为第一关键字, pair 的第二位作为第二关键字

例如:

typedef pair <long long, int> point;
priority_queue <point, vector<point>, greater<point> > q;

中,通过 typedef 将 point 转化为一种类似于自定义类型的形式,优先队列先考虑 point 的 first 位

C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

C++ 优先队列 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

定义 初始化一个优先队列

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

升序的使用pair的优先队列 默认对pair的第一个元素排序,所以建议数字放pair的第一个,用xx.first引用

//升序的使用pair的优先队列
priority_queue<pair<int, string>,vector<pair<int,string>>,greater<pair<int,string>> > pq;
//升序的使用pair的优先队列
priority_queue<pair<int, string>,vector<pair<int,string>>,less<pair<int,string>> > pq;

对pair结构体自定义排序

struct cmp
    template <typename T, typename U>
        bool operator()(T const &left, U const &right)
        
        // 以 second 比较。输出结果为 Second 较大的在前 Second 相同时,先进入队列的元素在前。 对pair第二个元素做降序排列 升序就反之
            return left.second > right.second;
        
    ;
    priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;

优先队列的API insert top erase都可以使用 下面介绍auto在其中的使用 只支持C++17以上

C++17结构化绑定 官方指南

假设我们有一个优先队列pq 我们要取队首 使用pq.top() 可以有两种写法

priority_queue<pair<int, string>,vector<pair<int,string>>,greater<pair<int,string>> > pq;
q.insert(make_pair(1,'a'));
q.insert(make_pair(2,'b'));

auto t1=q.top();
cout<<t1.first<<t1.second;//第一种

auto [num,name]=t1.top();//第二种 c++17以上

以上是关于对pair优先队列如何使小值先出队列 即按pair第一个元素排序 小的先出的主要内容,如果未能解决你的问题,请参考以下文章

中山纪念中学20170310洗衣服(贪心,优先队列升序pair)

优先队列自定义比较器

优先队列的使用

C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)

配对优先级队列