AI智能
改变未来

STL学习笔记(优先队列priority_queue)


优先队列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());

END

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » STL学习笔记(优先队列priority_queue)