又称为优先队列,其底层是用堆来进行实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。
当然,可以在任何时候往优先队列里面加入元素,而优先队列底层的数据结构堆(heap)会随时调整结构,使得每次的队首元素都是优先级最高的,话不多说让我们一起来了解一下吧。
其定义的写法和其他STL容器相同, typename 可以是任意基本数据类型或容器:
priority_queue name;
这里引入 priority_queue 常用函数 push(), top() ,pop(), empty(), q.size()的用法:
要使用优先队列,应先添加头文件
#include
并在头文件下面加上:
using namespacestd;
和队列不同的是优先队列没有 front()函数与back()函数,而只能通过 top() 函数来访问队首元素
(也称堆顶元素),也就是优先级最高的元素。
#include
#include
using namespace std;
int main()
{priority_queue q;q.push(3); //入队q.push(5);q.push(1);cout<cout<<"Empty"<cout<<"Not empty"<
优先队列最为强大的是它的排序功能,如何定义队列的优先级是运用好优先队列的关键,下面分别介绍
基本数据类型(例如:int char double)与结构体类型的优先级设置的方法。
基本数据类型的优先级设置:(即可以直接使用的数据类型),优先队列对他们的优先级设置一般是数字越大的优先级越高,因此队首是优先级最大的那个(如果是 char 类型,则是字典序最大的)。以int 型为例下面两种是等价的:
priority_queueq;
priority_queueq;
可以发现第二种定义方式的尖括号内多出了两个参数:其中 vector填写的是承载底层数据结构堆(heap)的容器,如果是其他类型 可写为 vector或vector;
第三个参数 less 则是对第一个参数的比较类,less 表示数字大的优先级越大,而 greater 表示数字小的优先级越大。