c++ priority_queue小堆
时间: 2023-10-19 09:25:03 浏览: 145
你好!C++中的`priority_queue`是一个容器适配器,用于实现堆数据结构。默认情况下,它是一个大堆(大顶堆),即具有最大元素的元素位于队列的前面。如果你想要实现小堆(小顶堆),可以通过以下两种方式来实现:
1. 自定义比较函数:你可以提供一个自定义的比较函数,将其作为`priority_queue`的第三个模板参数。这个比较函数需要返回`true`当第一个参数应该排在第二个参数之前,否则返回`false`。
例如,如果你想要实现一个存储整数的小堆,可以这样写:
```cpp
#include <queue>
// 自定义比较函数
struct Compare {
bool operator()(const int& a, const int& b) const {
return a > b; // 使用"小于"号来反转比较结果
}
};
int main() {
std::priority_queue<int, std::vector<int>, Compare> pq;
// 向小堆中插入元素
pq.push(5);
pq.push(2);
pq.push(10);
// 输出小堆中的元素
while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
输出结果为:2 5 10。
2. 使用lambda表达式:如果你只需要在一个特定的地方定义一个小堆,你可以使用lambda表达式来定义比较函数。
例如,使用lambda表达式来实现一个小堆:
```cpp
#include <queue>
int main() {
std::priority_queue<int, std::vector<int>, decltype([](const int& a, const int& b) { return a > b; })> pq;
// 向小堆中插入元素
pq.push(5);
pq.push(2);
pq.push(10);
// 输出小堆中的元素
while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
输出结果为:2 5 10。
希望能帮到你!如果有任何问题,请随时问我。
阅读全文