priority_queue的vector
时间: 2025-03-26 19:58:23 浏览: 30
### 如何使用 `vector` 作为 `priority_queue` 的底层容器
在 C++ 中,默认情况下,`std::priority_queue` 使用 `std::vector` 作为其底层容器[^2]。这意味着无需显式指定容器类型即可创建基于 `vector` 的优先队列。
#### 创建默认的 `priority_queue`
下面展示了如何声明并初始化一个简单的整数类型的优先队列:
```cpp
#include <queue>
#include <iostream>
int main() {
std::priority_queue<int> pq;
// 插入一些元素到优先队列中
pq.push(1);
pq.push(3);
pq.push(2);
while (!pq.empty()) {
std::cout << "Top element is : " << pq.top() << '\n';
pq.pop();
}
return 0;
}
```
这段代码定义了一个最大堆形式的优先队列(即每次取出的是当前最大的元素),因为这是 `priority_queue` 的默认行为。
#### 自定义比较函数与自定义容器
如果希望改变这种默认设置或想要更灵活地控制内部存储机制,则可以通过提供额外参数来自定义比较方式以及所使用的标准模板库(STL) 容器。对于继续采用 `vector` 而言,只需传递相应的模板实参给构造函数即可:
```cpp
#include <queue>
#include <functional>
#include <vector>
#include <iostream>
int main(){
typedef std::pair<int, int> PairType;
// 使用 vector 存储 pair 类型的数据,并按照第一个成员构建最小堆
std::priority_queue<PairType,
std::vector<PairType>,
decltype([](const PairType& l, const PairType& r){
return l.first > r.first;})> min_heap_pq{[](const PairType& l, const PairType& r){return l.first > r.first;}};
min_heap_pq.emplace(1, 'a');
min_heap_pq.emplace(5, 'b');
min_heap_pq.emplace(3, 'c');
while(!min_heap_pq.empty()){
auto top = min_heap_pq.top();
std::cout << "(" << top.first << ", " << static_cast<char>(top.second) << ")" << "\n";
min_heap_pq.pop();
}
}
```
此示例说明了如何通过 lambda 表达式来定制化比较逻辑,从而使得 `priority_queue` 成为了一个小顶堆;同时也指定了 `std::vector<pair<int,int>>` 作为实际储存数据结构。
阅读全文
相关推荐


















