STL之优先队列

优先队列简单教程

STL之优先队列

写在前面

先做一个超级简单的新手帖,教教大家怎么正确的使用STL里面的优先队列priority_queue.


简介

priority_queue是STL里面事先已经实现好的堆排序,构成了一个可以直接输出最大值或者最小值,查询时间只需要O(logn)的调用函数,它的基本语句如下

priority_queue,less> q; //<需要存储的类型,不定长数组,是小顶堆还是大顶堆> q:优先队列的名字
(PS: less是从大到小输出,greater是从小到大输出,最后两项可以不写,默认是大顶堆,也就是less)
q.empty()//查询队列是否有元素,有就返回true,否则false
q.push(a)//让a入队
q.pop()//让队头元素出队
q.top()//查询现在队头的元素


简单应用

头文件

1
2
3
4
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;

队列声明

1
priority_queue<int> q;

队列操作

1
2
3
4
5
6
7
8
9
10
11
int main()
{
while(!q.empty()) q.pop();/*先清空队列(好习惯要有)*/
q.push(1);/*将1放入队列*/
int a=3;
q.push(a);/*将3放入队列*/
cout << q.top() << endl;/*将队头元素3输出*/
q.pop();/*将队头元素3弹出队列*/
cout << q.top() << endl;/*将队头元素1输出*/
return 0;
}

写在最后

当然强大的STL里面除了优先队列还有普通队列,还有栈,还有pair,map之类的,在后续的题目里面,更多更好的操作就是把它们联合起来一起用,这也会在我之后的blog里写到~