联系作者:humminwang@163.com
优先队列
优先队列 ( p r i o r i t y q u e u e ) (priority \ queue) (priority queue)定义:
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出
(
f
i
r
s
t
i
n
,
l
a
r
g
e
s
t
o
u
t
)
(first \ in, largest \ out)
(first in,largest out)的行为特征。
通常采用 堆 数据结构来实现。
简单陈述:
具备优先级的队列,队首元素总为优先级最高的元素,而这个优先级是程序员设定的,比如,拥有最大值的元素优先级最高,那么在每次在向优先队列删除或者添加元素时,队首的元素总是该队列中的最大值。
C++代码实现
#include<queue>
// priority_queue<结构类型> 队列名;
priority_queue <int> i;
priority_queue <int,vector<int>,greater<int> > q;//从小到大
priority_queue <int,vector<int>,less<int> >q;//从大到小
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
//自定义的排序规则
struct node
{
int fir,sec;
void Read() {scanf("%d %d",&fir,&sec);}
}input;
struct cmp1
{
bool operator () (const node &x,const node &y) const
{
return x.fir<y.fir;
}
};//当一个node x的fir值小于另一个node y的fir值时,称x<y
priority_queue<node,vector<node>,cmp1> q1;
下节我们介绍堆,一种实现优先队列的基本数据结构。
Reference:
https://blog.youkuaiyun.com/c20182030/article/details/70757660
https://baike.baidu.com/item/%E4%BC%98%E5%85%88%E9%98%9F%E5%88%97/9354754?fr=aladdin