优先队列其头文件
#include<queue>
其中队列为先进先出的原则,而优先队列为按照最高优先级出队。
声明一个优先队列时:priority_queueq;
基本操作为:
q.push():向队列里添加一个元素;
q.top():返回优先队列中的队顶元素;
q.empty():判断优先队列是否为空;
q.size():返回优先队列中拥有的元素个数;
q.pop():删除队顶元素;
优先队列中优先元素自定义:
const int N = 1e5+10;
struct node{
int num;
int date;
friend bool operator <(node a,node b)
{
return a.date<b.date;//大的优先级高
}
}e[N];
若有运算符重载不懂的,先去看懂运算符重载;
下面是一些优先队列的基本操作的实现:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<stdlib.h>
#include<queue>
using namespace std;
const int N = 1e5+10;
struct node{
int num;
int date;
friend bool operator <(node a,node b)
{
return a.date<b.date;//大的优先级高
}
}e[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&e[i].date);
e[i].num;
}
priority_queue<node>q;//创建一个空的优先队列
for(int i=1;i<=n;i++)
{
q.push(e[i]);//入队
}
int l=q.size();//返回优先队列拥有的元素个数
printf("该优先队列中的元素个数为:%d\n",l);
while(!q.empty())//当队列非空时执行
{
node s=q.top();//返回队列的队顶元素
q.pop();//删除队顶元素
printf("%d %d\n",s.num,s.date);
}
return 0;
}