(1)优先队列的本质是堆,包含在头文件#include中,它具有队列的所有特性,不同点就是它的内部元素是有序排列的,出队的时候按优先级出队,可以以O(log n)的效率在队列中查找最大值或最小值,最大值最小值由所创建的优先队列的性质所决定,主要应用于贪心的最优解问题。
(2)优先队列的语法(priority_queue)
Type: 数据类型
Container: 保存数据的容器
Functional: 元素的比较方式
在使用优先队列时默认情况下(不加后面两个参数)是以vector为容器,以operator
只使用第一个参数时,优先队列是一个大根堆,堆顶元素为最大元素
代码实现
#include<iostream>
#include <functional>
#include<queue>
using namespace std;
//大根堆
priority_queue<int>a;
priority_queue<int,vector<int>,less<int>>b;
//小根堆
priority_queue<int,vector<int>,greater<int>>c;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)a.push(i);
for(int i=1;i<=n;i++)b.push(i);
for(int i=1;i<=n;i++)c.push(i);
while(!a.empty()){
cout<<a.top()<<" ";
a.pop();
}
cout<<endl;
while(!b.empty()){
cout<<b.top()<<" ";
b.pop();
}
cout<<endl;
while(!c.empty()){
cout<<c.top()<<" ";
c.pop();
}
cout<<endl;
return 0;
}
优先队列的成员函数
函数 | 描述 |
push() | 将元素插入队列 |
pop() | 将优先级最高的元素从队列中删除 |
top() | 将优先级最高的元素输出 |
size() | 返回优先队列的大小 |
empty() | 如果队列为空返回true,否则返回false |
swap() | 将队列中的元素与具有相同类型和大小的另一队列交换 |
emplace() | 在优先队列的顶部插入一个新元素 |