文章目录
本文将介绍C++ STL 库
queue
头文件中的优先队列priority queue,主要涉及基础函数,其底层实现,以及有关应用。
主要参考文档 https://en.cppreference.com/w/cpp/container/priority_queue
声明与初始化
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
- 声明输入
T
: 指定该优先队列内存放的元素之类型 - 声明输入
Container
: 指定该优先队列的底层容器- 注:该容器必须为支持
front(), push_back(), pop_back()
的有序容器,原因见后文源码,默认为std::vector
- 注:该容器必须为支持
- 声明输入
Compare
:指定优先度的判断条件- 函数模板
bool Compare(T arg_1, T arg_2);
- 注:当该函数返回
True
时,arg1
将晚于arg2
出队,即arg2
优先度更高。换种说法,在队首的元素与其他所有元素进行compare
的结果都是False
。 - 默认为
std::less
,即return arg1 < arg2;
, 如此将为大顶堆,同理std::greater
为小顶堆。
- 函数模板
基础函数
此处将介绍几个较为常用的,完整列表详见 https://en.cppreference.com/w/cpp/container/priority_queue
构造函数
- 默认构造函数
priority_queue() : priority_queue(Compare(), Container()) {
}
- 拷贝优先队列构造函数
priority_queue( const priority_queue& other );
- 拷贝其他容器构造函数
template< class InputIt >
priority_queue( InputIt first, InputIt last,
const Compare& compare, const Container& cont );
容器属性函数
几乎所有C++容器都带有的常见函数,不多赘述
bool empty() const; // 检查是否为空
size_type size() const; // 返回容器内元素数量
队列专属函数
- 获取队首元素(对于优先队列即为优先度最高元素)
const_reference top() const;
void pop();
void push( const value_type& value );
具体成员函数列表…
代码案例
基础初始化,push()
,pop()
操作
#include<queue>
#include<iostream>
// Print all element in the queue in order
void printQueue(std::priority_queue<int>& q){