优先队列 头文件#include <queue>
优先级队列是一种容器适配器,根据某种严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的一个。
此上下文类似于堆,其中元素可以随时插入,并且只能检索max heap元素(优先级队列中位于顶部的元素)。
优先级队列被实现为容器适配器,容器适配器是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素。元素从特定容器的“背面”弹出,该容器被称为优先级队列的顶部。
优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的
和队列基本操作相同:
top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容
************************************分割线************************************
其实我最想说的是对于优先队列中插入一对元素,此时是按这一对元素中的first来排序的。
使用push的话就得加上他的类型,具体看代码:
插入一对元素,可以直接使用emplace,但是使用push就得用代码里那种形式
#include<iostream>
#include<queue>
using namespace std;
int main() {
priority_queue<int>s;
s.push(1);
s.emplace(2);
priority_queue<pair<int, int>>q;
q.emplace(1,1);
q.push(pair<int, int>(2, 1));
q.push(pair<int, int>(3, 1));
q.push(pair<int, int>(4, 1));
q.push(pair<int, int>(5, 1));
while(!q.empty()) {
cout << q.size()<< " "<<q.top().first << " "<< q.top().second<<endl;
q.pop();
}
return 0;
}
运行结果: