1、什么是优先队列?
C++ Priority Queues(优先队列)
(1)C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。
2、头文件
#include <queue>
3、定义
std::priority_queue<TypeName> q; // 数据类型为 TypeName
std::priority_queue<TypeName, Container> q; // 使用 Container 作为底层容器
std::priority_queue<TypeName, Container, Compare> q;
// 使用 Container 作为底层容器,使用 Compare 作为比较类型
// 默认使用底层容器 vector
// 比较类型 less<TypeName>(此时为它的 top() 返回为最大值)
// 若希望 top() 返回最小值,可令比较类型为 greater<TypeName>
// 注意:不可跳过 Container 直接传入 Compare
// 从 C++11 开始,如果使用 lambda 函数自定义 Compare
// 则需要将其作为构造函数的参数代入,如:
auto cmp = [](const std::pair<int, int> &l, const std::pair<int, int> &r) {
return l.second < r.second;
};
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int> >,
decltype(cmp)>
pq(cmp);
4、相关操作(函数)
empty() 如果优先队列为空,则返回真 pop() 删除第一个元素 push() 加入一个元素 size() 返回优先队列中拥有的元素的个数 top() 返回优先队列中有最高优先级的元素
5、代码示例
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<int> q;//创建一个普通优先队列
priority_queue<int, vector<int>> q2;//创建一个基于底层容器vector的优先队列
priority_queue<int, deque<int>, greater<int>> q3;//使用deque作为底层容器,greater表示内置类型从大到小排序,less表示内置类型从小到大排序。
for (int i = 1; i <= 5; i++) q.push(i);//q={1,2,3,4,5}
cout << q.top() << endl;//访问堆顶元素:5
q.pop();//堆中元素:q={1,2,3,4}
cout << q.size() << endl;//4
for (int i = 1; i <= 5; i++) q3.push(i);//q3={1,2,3,4,5}
cout << q3.top() << endl;//1
return 0;
}