c++ priority_queue使用
时间: 2025-07-16 15:14:50 浏览: 16
在C++中,`priority_queue` 是一种容器适配器,用于实现优先队列。它的第一个元素总是当前包含的元素中最大的(默认情况下),这使得它非常适合需要快速访问最大元素的场景[^4]。
### 基本用法
`priority_queue` 的模板类型定义如下:
```cpp
template <typename T, typename Container=std::vector<T>, typename Compare=std::less<T>> class priority_queue;
```
这意味着 `priority_queue` 需要三个模板参数:
- `T`:存储在队列中的元素类型。
- `Container`:用于存储数据的底层容器,默认为 `std::vector<T>`。
- `Functional`:比较函数或对象,用于确定元素的排序规则,默认为 `std::less<T>`,即构建大根堆[^2]。
### 创建和初始化
创建一个简单的 `priority_queue` 实例非常直接。下面的例子展示了如何声明一个整数类型的优先队列,并向其中添加一些元素:
```cpp
#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> pq;
// 向优先队列中添加元素
pq.push(10);
pq.push(30);
pq.push(20);
// 输出队列顶部元素,即最大的元素
std::cout << "Top element: " << pq.top() << std::endl; // 输出30
// 移除顶部元素
pq.pop();
// 再次输出顶部元素
std::cout << "New top element: " << pq.top() << std::endl; // 输出20
return 0;
}
```
### 自定义比较器
如果需要创建一个小根堆而不是默认的大根堆,可以通过提供自定义的比较器来实现。例如,使用 `std::greater<T>` 比较器可以轻松地创建一个小根堆:
```cpp
#include <iostream>
#include <queue>
#include <functional> // std::greater
int main() {
// 使用 std::greater<int> 创建小根堆
std::priority_queue<int, std::vector<int>, std::greater<int>> minPQ;
minPQ.push(10);
minPQ.push(30);
minPQ.push(20);
// 输出最小的元素
std::cout << "Minimum element: " << minPQ.top() << std::endl; // 输出10
return 0;
}
```
### 注意事项
- `priority_queue` 不支持迭代器,因此不能直接遍历队列中的所有元素。
- 插入和删除操作的时间复杂度接近于对数时间,即 O(log n)。
- 底层容器的选择会影响性能,通常推荐使用 `std::vector` 或 `std::deque`,因为它们提供了良好的随机访问特性[^3]。
通过上述介绍和示例,应该能够开始在自己的项目中使用 `priority_queue` 来处理需要优先级管理的数据了。
阅读全文
相关推荐




















