优先级队列,底层数据结构是由一个堆,默认情况下是一个大堆,如果想让其变成一个小堆,可以在创建的时候传一个仿函数,通俗的来说,就是优先级队列会自动排序,默认排序是降序(大堆)
基本使用
创建和初始化:
priority_queue<数据类型,容器,仿函数>
1,普通创建和初始化
2,仿函数初始化
greater:小堆
less:大堆
3,入队
push
将数据插入队列尾部
4,出队
pop
将队头元素删除
5,获取队头元素
top
6,判空
empty
7,获取元素个数
size
8,交换队列
swap
底层原理
普通的queue底层使用的是数组,而优先级队列使用的堆,因为堆在删除和插入时会向上和向下调整,能保持升序和降序,而且成本较低
我们来模拟实现一下:
//使用两个仿函数来搞定大堆小堆的问题
template<class T>
struct less
{
bool operator()(T x, T y)
{
return x > y;
}
};
template<class T>
struct greate
{
bool operator()(T x, T y)
{
return x < y;