优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序
每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。
例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高
所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。
priority_queue<int, vector<int>, greater<int> >pq; 格式
第一个参数为数据类型
第二个参数为容器类型。
第三个参数为比较函数。////可以自定义 默认从大到小 ///先跳过自定义
STL里面默认用的是 vector. 比较方式默认用从大到小
还有一点要注意的是priority_queue中的三个参数,后两个可以省去,因为有默认参数,不过如果,有第三个参数的话,必定要写第二个参数。
用法:
- ///q.push (x);///将x接到队列的末端。
- ///q.top ();///访问队首元素
- ///q.pop ();///删除队首元素
- ///q.front();///访问队首元素 最早被压入队列的元素。
- ///q.back();///访问队尾元素 最后被压入队列的元素。
- ///q.size();///访问队列中的元素个数
- ///q.empty ();///判断是否为空 当队列空时,返回true。
- //priority_queue <int>q;///默认从大到小排序输出
- ///priority_queue <int ,vector<int> , greater <int> >q;///从小到大排序输出 >>会被认为是错误 中间要加空格
- while (!q.empty ())///使用的时候要先判断队列是否为空 不为空的话就清空。。
- q.pop ();