优先队列priority_queue
概念
priority_queue翻译为优先队列,其底层是用堆来实现的。在优先队列中,任何时刻,队首元素一定是当前队列中优先级最高的那一个。
头文件
#include及using namespace std;。
定义
priority_queue<type_name> name;
type_name也可为任何数据类型
注意事项
和queue不一样的是,priority_queue没有front()和back(),而只能通过top()或pop()访问队首元素(也成为堆顶元素),也就是优先级最高的元素。
常用函数
push()
解释:push(x)是将x加入优先队列,时间复杂度为O(log n),n为当前优先队列中的元素个数。加入后会自动调整priority_queue的内部结构,以保证队首元素(堆顶元素)的优先级最高。
top()
解释:top()是获取队首元素(堆顶元素),时间复杂度为O(1)。
例:
priority_queue<int> q;q.push(3);q.push(4);q.push(1);printf(“%d\\n”,q.top());//以上代码输出4//需要注意的是,使用top()前,必须用empty()判断优先队列是否为空,否则有可能出错。
pop()
解释:pop()是让队首元素(堆顶元素)出队,由于出队后要调整堆内部结构,所以时间复杂度是O(log n)。
例如:
priority_queue<int> q;q.push(3);q.push(4);q.push(1);printf(“%d\\n”,q.size());q.push(4);printf(“%d\\n”,q.top());q.pop();printf(“%d\\n”,q.top());//以上代码输出3444
优先级设置
//大根堆优先队列的定义:priority_queue<int> q; //默认为大顶堆优先队列priority_queue<int,vector<int>,less<int> > q;//小根堆优先队列的定义:priority_queue<int,vector<int>,greater<int> > q;
例如:
priorty_queue<int,vector<int>,greater<int> > q;q.push(3);q.push(4);q.push(1);printf(“%d\\n”,q.top());