C++中priority_queue是基于堆的容器适配器,默认为大顶堆,自动排序并优先弹出最大值;通过std::greater可改为小顶堆;底层使用vector存储,借助push_heap和pop_heap维护堆性质;支持自定义类型,需重载operator

在C++中,priority_queue 是一个基于堆(heap)实现的容器适配器,能够自动将元素按照优先级排序,默认是大顶堆(最大值优先)。它并不像普通队列那样遵循先进先出原则,而是每次取出当前优先级最高的元素。
priority_queue 的基本用法
在 C++ 标准库中,priority_queue 定义在
默认大顶堆(最大值优先):
#include <queue>
#include <iostream>
<p>std::priority_queue<int> pq;
pq.push(10);
pq.push(30);
pq.push(20);
while (!pq.empty()) {
std::cout << pq.top() << " "; // 输出:30 20 10
pq.pop();
}</p>登录后复制
小顶堆(最小值优先):
立即学习“C++免费学习笔记(深入)”;
std::priority_queue<int, std::vector<int>, std::greater<int>> pq;
登录后复制
这里第三个模板参数指定比较函数对象,使用 std::greater
priority_queue 的底层原理
priority_queue 实际上是一个堆结构的封装,通常基于完全二叉树,使用数组(如 vector)存储。其核心操作依赖于两个算法:
- 向上调整(push_heap):插入新元素后,从底部向上调整以维持堆性质。
- 向下调整(pop_heap):删除堆顶后,将最后一个元素移到顶部,再向下调整。
这些操作的时间复杂度为 O(log n),而访问堆顶是 O(1)。
C++ STL 中的 priority_queue 默认使用 std::vector 作为底层容器,并通过 std::make_heap、std::push_heap、std::pop_heap 等函数维护堆结构。
还木有评论哦,快来抢沙发吧~