priority_queue如何初始化最小堆
时间: 2024-10-10 19:04:24 浏览: 20
在C++中,`priority_queue`是一个模板容器,它实现了二叉堆(通常是最小堆或最大堆)。默认情况下,`priority_queue`使用`greater`比较器创建一个最大堆,如果你想创建一个最小堆,你需要显式地指定比较器。
要初始化一个最小堆,你可以这样做:
```cpp
#include <queue>
// 使用std::less比较器,表示升序排列
template <typename T, typename Compare = std::less<T>>
std::priority_queue<T, std::vector<T>, Compare> minHeap;
// 或者如果你有一个自定义的比较函数cmp
std::priority_queue<int, std::vector<int>, decltype(cmp)> minHeap(cmp);
// 如果没有提供比较器,编译时会使用默认的greater比较器
std::priority_queue<int> maxHeap; // 这里实际上是最大堆
```
在这个例子中,`std::vector<T>`是内部的数据存储容器,`Compare`是你自定义的比较器类型,默认为`std::less<T>`。
如果你已经有一个初始元素列表,你可以先将其放入堆中,然后用这些元素初始化堆:
```cpp
std::vector<int> elements {5, 3, 7, 1, 9};
std::priority_queue<int> minHeap(elements.begin(), elements.end(), std::less<int>());
// 现在minHeap是一个最小堆,其中包含这些元素
```
阅读全文