优先队列介绍
priority_queue 是 C++ 标准模板库(STL)中的一个容器适配器,提供了堆数据结构的实现(默认为最大堆)。它在需要高效访问最大/最小元素的场景下非常有用。
如果需要使用小顶堆,可以这样传参
priority_queue<int, vector<int>, greater<int>>
它是默认基于(大顶)堆实现的,例如一颗用数组存储的完全二叉树:

特点总结:
- 采用数组形式存储
- 默认基于最大堆实现
- 适配器容器底层为 vector(使用需要包含
<queue>) - 每次只能访问队列顶部的元素,即优先级最高的元素
- 复杂度:访问 O(1)、插入 O(log n)、删除顶部元素 O(log n)
优先队列的渊源
通过优先队列的容器结构可以看出,它的底层容器是 vector。为什么不取名叫优先维克托呢?
问:为什么底层容器是 vector? 连续内存结构适合堆的随机访问需求,缓存友好,且动态数组支持高效尾部操作。
问:为什么头文件是 queue? 作为容器适配器,优先队列在概念上属于队列的一种,与 queue 共用同一头文件,体现了接口的一致性,比如队列的各种接口刚好吻合它的访问、插入、删除行为:
priority_queue --> "<queue> 头文件" : 声明接口
问:为什么叫优先队列而不是优先维克托? 名称语义分解:
- 优先 (Priority):元素按内在重要性排序,而非插入顺序
- 队列 (Queue):仅允许特定端点访问的操作模型(队尾插入,队首访问)
行为本质:
- 插入操作:
push(),时间复杂度 O(log n) - 访问操作:
top(),总是获取优先级最高的元素 - 删除操作:
pop(),移除当前最高优先级元素
实例化
采用:priority_queue<数据类型> 变量名;
我们可以选择默认初始化:
priority_queue<int> V1;
也可以选择范围初始化:
priority_queue<int> V2(arr, arr+n); //或者用另一个容器去初始化 priority_queue<int> V3(V1.begin(), V1.end());
效果展示:










