priority_queue 是容器适配器,它提供常数时间的(默认)最大元素查找,对数代价的插入与释出。
可用用户提供的
Compare
更改顺序,例如,用 std::greater将导致最小元素作为 top() 出现。 用
priority_queue
工作类似管理某些随机访问容器中的堆,优势是不可能突然把堆非法化。
默认情况下priority_queue内部是以”降序“排列的,即默认大顶堆。
一、使用
定义于头文件
1 | template< |
模板形参
- T - 存储的元素类型。若
T
与Container::value_type
不是同一类型则行为未定义。 (C++17 起) - Container - 用于存储元素的底层容器类型。容器必须满足序列容器 (SequenceContainer) 的要求,而其迭代器必须满足遗留随机访问迭代器 (LegacyRandomAccessIterator) 的要求。另外,它必须提供拥有通常语义的下列函数:
front()``push_back()``pop_back()
标准容器 std::vector 和 std::deque 满足这些要求。 - Compare - 提供严格弱序的比较 (Compare) 类型。
堆实现
大顶堆:priority_queue默认实现大顶堆,也可将priority_queue模板第三个参数显示设置 std::less
小顶堆:priority_queue模板第三个参数显示设置 std::greater
二、priority_queue自定义排序
前面说到 priority_queue 容器适配器时,还遗留一个问题,即当
首先来看看 std::less
比如,std::less
1 | template <typename T> |
std::greater
1 | template <typename T> |
可以看到,std::less
仿照 std::less
参考文章: