C++优先队列基本用法 priority_queue
优先队列
参考网站资料,仅供笔记使用侵删
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。需要使用头文件 #include
在push进元素时,会对队列进行堆排序。可以用以边输入边维护数组升降序列,当然容器中的顺序并不是升降序,只是在堆顶始终是最大小值。
定义方式: priority_queue<Type, Container, Functional>
其中容器类型必须是数组实现的容器,比如vector,dequeue,而list就不行。STL中默认是vector,优先比较方式默认是大顶堆less
1 //升序队列,小顶堆
2 priority_queue <int,vector<int>,greater<int> > q;
3 //降序队列,大顶堆
4 priority_queue <int,vector<int>,less<int> >q;
基本操作还是STL的尿性:
- top 访问队头元素
- empty 队列是否为空
- size 返回队列元素个数
- push 插入元素并排序
- emplace 原地构造一个元素并插入队列
- pop 弹出堆顶元素
- swap 交换
也可以选择在push时push进-num,这时大小顶堆的功能就会交换。