优先队列概述
priority_queue 是 C++ 标准模板库(STL)中一个非常实用的容器适配器,它基于堆(Heap)数据结构实现。默认情况下,它是一个最大堆,即每次取出的都是当前集合中优先级最高的元素。
在实际开发中,无论是算法竞赛中的贪心策略,还是操作系统调度、实时交易系统的任务处理,只要涉及'按优先级排序'的需求,优先队列都是首选方案。
底层结构与特性
优先队列的底层容器默认是 vector。选择连续内存结构不仅适合堆的随机访问需求,还能带来更好的缓存命中率。虽然头文件包含在 <queue> 中,但它的行为更接近于一种特殊的队列——只允许在队尾插入,在队首(堆顶)访问和删除。
核心特点:
- 存储方式:数组形式存储的完全二叉树。
- 默认行为:大顶堆(最大值在顶部)。
- 自定义小顶堆:需传入比较器
greater<int>。 - 操作限制:只能访问堆顶元素,无法遍历中间节点。
- 时间复杂度:访问 O(1),插入/删除 O(log n)。

API 使用指南
初始化
支持默认构造或范围初始化:
// 默认初始化
priority_queue<int> pq;
// 范围初始化(例如从数组)
int arr[] = {1, 5, 3};
priority_queue<int> pq2(arr, arr + 3);
基本操作
- 插入元素:
push(val),自动调整堆结构,O(log n)。 - 访问堆顶:
top(),返回最高优先级元素,不删除,O(1)。 - 删除堆顶:
pop(),移除当前最大值,并重新调整堆,O(log n)。 - 判断空:
empty(),若为空返回 true。 - 获取大小:
size(),返回当前元素个数。
V.push(val); // 插入
V.top(); // 查看
V.pop();
V.();
V.();






