c++怎么实现一个优先队列_c++优先队列(priority_queue)的原理与实现

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

c++怎么实现一个优先队列_c++优先队列(priority_queue)的原理与实现-第1张图片-佛山资讯网

在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 实现升序,即最小值在 top。

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 等函数维护堆结构。

标签: c++ ios stream 标准库

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~