概述
目标:使用结构体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 = %dn",Q.top().data,Q.top().label);
Q.pop();
}
return 0;
}
最后
以上就是香蕉小霸王为你收集整理的priority_queue 结构体的优先级设置的全部内容,希望文章能够帮你解决priority_queue 结构体的优先级设置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复