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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值