优先队列是一种用来维护由一组元素构成的集合的数据结构,可以用堆来实现。在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问。
最大优先队列可用于共享计算机系统的作业调度等,最小优先队列可用于基于事件驱动的模拟器等。
最大优先队列c++代码
#include <iostream>
#include<queue>
using namespace std;
/*定义一串数x与对应的优先级p*/
class node
{
public:
int x,p;
node(int a,int b):x(a),p(b){}//初始化
};
//标准库默认使用元素类型的<操作符来确定它们之间的优先级关系
bool operator<(const node &A,const node &B)//按照优先级p从大到小排,operator为重载运算符
{
return A.p<B.p;
}
int main()
{
priority_queue<node>priorityQue;//声明名为priorityQue的node类型优先队列
priorityQue.push(node(10,3));
priorityQue.push(node(30,1));
priorityQue.push(node(40,2));
priorityQue.push(node(60,4));
priorityQue.push(node(30,6));
priorityQue.push(node(20,5));
cout<<"优先级从大到下排序(最大优先队列):"<<endl;
while(!priorityQue.empty())
{
node C=priorityQue.top();//返回对顶元素
priorityQue.pop();//删除队顶元素
cout<<C.x<<"对应其优先级为"<<C.p<<endl;
}
return 0;
}
运行结果
最小优先队列c++代码
#include <iostream>
#include<queue>
using namespace std;
/*定义一串数x与对应的优先级p*/
class node
{
public:
int x,p;
node(int a,int b):x(a),p(b){}//初始化
};
//如果我们要把元素从小到大输出,我们可以传入一个比较函数
bool operator>(const node &A,const node &B)//按照优先级p从小到大排,operator为重载运算符
{
return A.p>B.p;
}
int main()
{
priority_queue<node,vector<node>,greater<node>>priorityQue;//声明名为priorityQue的node类型优先队列
priorityQue.push(node(10,3));
priorityQue.push(node(30,1));
priorityQue.push(node(40,2));
priorityQue.push(node(60,4));
priorityQue.push(node(30,6));
priorityQue.push(node(20,5));
cout<<"优先级从小到大排序(最小优先队列):"<<endl;
while(!priorityQue.empty())
{
node C=priorityQue.top();//返回对顶元素
priorityQue.pop();//删除队顶元素
cout<<C.x<<"对应其优先级为"<<C.p<<endl;
}
return 0;
}
运行结果