目录
前言
一、基本知识
二、使用
前言
priority_queue是在queue库里的,所以使用的时候要包含queue头文件。使用方法和堆类似,因为它的底层其实就是大根堆。
一、基本知识
优先队列
优先级队列是一种容器适配器,根据一些严格的弱排序标准,专门设计为它的第一个元素始终是它所包含的元素中最大的一个。
此上下文类似于堆,可以随时插入元素,并且只能检索最大堆元素(优先级队列中顶部的元素)。
优先级队列作为容器适配器实现,容器适配器是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素。元素从特定容器的“背面”弹出,这称为优先级队列的顶部。
二、使用
优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。
函数声明 | 接口说明 |
priority_queue()/priority_queue(first, last) | 构造一个空的优先级队列 |
empty( ) | 检测优先级队列是否为空,是返回true,否则返回false |
top( ) | 返回优先级队列中最大(最小元素),即堆顶元素 |
push(x) | 在优先级队列中插入元素x |
pop() | 删除优先级队列中最大(最小)元素,即堆顶元素 |
使用方法很简单,一段代码快速掌握:
#include<iostream>
#include<queue>
using namespace std;
int main()
{priority_queue<int> vv;//初始化vv.push(4);//压入数据vv.push(2);vv.push(1);vv.push(3);while (!vv.empty())//检查是否为空{cout << vv.top() << " ";//访问数据vv.pop();//弹出数据}cout << endl;//如果是要小的优先级高的话priority_queue<int, vector<int>, greater<int>> aa;aa.push(4);aa.push(2);aa.push(1);aa.push(3);while (!aa.empty()){cout << aa.top() << " ";aa.pop();}cout << endl;return 0;
}
可以运行一下看看结果是什么?