优先队列
在队列基础上按优先级顺序进入队列
0.头文件#include <queue>
greater和less的优先级比较(和自定义的作用一样),在头文件#include <functional>里
1.创建一个优先级队列时有两种申请方式:
priority_queue<ElemType>q或者priority_queue<ElemType,vector<ElemType>,greater<ElemType> >q,
第一种默认的东西比较多,比如底层的实现方式以及堆的性质;
第二种就说明的比较清晰了,第一个参数是队列中元素的类型;第二个就是队列底层的实现方式,这里是用vector实现的;第三个是堆的性质,greater对应小顶堆,less对应大顶堆,当然这两个只能适用于一些基本类型,于是优先级就是这些基本类型元素的大小。
如果遇到一些复杂的类型,比如结构体或类,那么就要重新定义这个优先级,于是便要重载bool operator(),或者重载<。
例如:
声明优先队列 priority_queue<int>q;//这是默认的优先级顺序
也可以直接对于结构体 priority_queue<node>q[10];//其中struct node{……};
(node n;//声明一个结构体 再 p[b].push(n);//这一种直接将结构体压入队列中)
2.基本操作:
q.empty() 如果队列为空,则返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队首元素,但不返回其值
q.top() 返回具有最高优先级的元素值,但不删除该元素
q.push(item) 在基于优先级的适当位置插入新元素
重载