priority_queue 结构体的优先级设置
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了priority_queue 结构体的优先级设置相关的知识,希望对你有一定的参考价值。
目标:使用结构体Node类型的优先队列,让其按照我们希望的顺序进行排序。
预备知识:会结构体的定义,和结构体类型的优先队列的定义,知道优先队列默认是最大堆排序(即top()得到的是最大的元素)
要做的事:在结构体内部重载小于号,即在结构体内加入以下内容
friend bool operator < (Node a,Node b){
if(a.label!=b.label){return a.label < b.label};//希望label大的先出
else return a.data > b.data;//希望data小的先出
}
友情提示:priority_queue不像queue,没有front()和back()方法,只有top()方法。像是queue和stack的杂交。
代码:
#include<queue>
#include<cstdio>
using namespace std;
struct Node{
int data;
int label;
friend bool operator < (Node a,Node b){
if(a.label!=b.label)return a.label<b.label;
else return a.data > b.data;
}
Node(int _data,int _label):data(_data),label(_label){}
};
priority_queue<Node> Q;
int main(){
Node a = Node(1,1);
Node b = Node(1,2);
Node c = Node(2,1);
Node d = Node(2,2);
//把4个结点放进队列的先后顺序是无所谓的
Q.push(a);
Q.push(b);
Q.push(c);
Q.push(d);
//期望输出顺序是 b d a c
while(!Q.empty()){
printf("data = %d,label = %d\\n",Q.top().data,Q.top().label);
Q.pop();
}
return 0;
}
以上是关于priority_queue 结构体的优先级设置的主要内容,如果未能解决你的问题,请参考以下文章
C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)
C++ 优先队列 堆 priority_queue的使用 以及内部使用结构化pair的排序的用法 auto在其中的用法(结构化绑定 C++17以上)