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以上)

优先级队列Priority_queue

优先级队列priority_queue

优先级队列priority_queue

C++Review6_优先队列priority_queue