c++ 堆
时间: 2023-07-01 16:18:03 浏览: 111
C++中的堆是一种基于完全二叉树的数据结构,常用于实现优先队列等需要动态管理元素优先级的场景。
C++中的堆分为最大堆和最小堆两种,最大堆的根节点是堆中最大的元素,最小堆的根节点是堆中最小的元素。堆中的每个节点都比它的子节点大(最大堆)或小(最小堆)。
C++中可以使用STL中的priority_queue来实现堆。priority_queue是一个模板类,使用时需要指定元素类型和比较函数。比较函数可以使用lambda表达式、函数指针等方式进行定义,用于对元素进行比较,以确定元素的优先级。
以下是priority_queue的一些常用操作:
1. push(element):将元素加入堆中。
2. top():返回堆顶元素。
3. pop():弹出堆顶元素。
4. size():返回堆中元素个数。
5. empty():检查堆是否为空。
以下是使用最大堆实现的一个示例代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> maxHeap;
// push元素
maxHeap.push(3);
maxHeap.push(1);
maxHeap.push(4);
maxHeap.push(1);
maxHeap.push(5);
// 访问堆顶元素
cout << maxHeap.top() << endl; // 输出5
// 弹出堆顶元素
maxHeap.pop();
cout << maxHeap.top() << endl; // 输出4
// 输出堆中元素个数
cout << maxHeap.size() << endl; // 输出4
// 检查堆是否为空
cout << maxHeap.empty() << endl; // 输出0
return 0;
}
```
输出结果为:
```
5
4
4
0
```
需要注意的是,priority_queue实现的是最大堆,如果需要实现最小堆,需要自定义比较函数并在priority_queue中传入。
阅读全文