![]()
![]()
优先队列(priority queue)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。
优先队列具有最高级先出的行为特征。通常采用堆数据结构来实现。
priority_queue常用方法
push()
将一个元素入队,时间复杂度为logN(N为其中的元素个数)
pop()
将队首元素(堆顶元素)弹出队列。
top()
访问队首的元素。使用top之前必须先使用empty()判断优先队列是不是空的,否则可能因为队空而出现错误。
empty()
判断优先队列是不是空的,空队列返回true
size()
返回当前优先队列内的元素个数。
#include <queue>
声明方式:
1、普通方法:
priority_queue<int>q; //按照元素从大到小的顺序出队
priority_queue< int,vector<int>, greater<int> >q; //按照元素从小到大的顺序出队
2、结构体声明方式:
struct node {
int x, y;
friend bool operator < (node a, node b)
{
return a.x > b.x; //结构体中,x小的优先级高,可认为b是顶端可操作的元素
}
};
priority_queue<node>q; //定义方法
//在该结构中,y为值, x为优先级。
//在重载”<”时,最好不要重载”>”,可能会发生编译错误