头文件
需添加头文件
#include<algorithm>
make_heap
建堆
vector<int> arr{3, 1, 4, 6, 2, 5} // 3, 1, 4, 6, 2, 5
# 大根堆
make_heap(arr.begin(), arr.end()); // 6, 3, 5, 1, 2, 4
# 小根堆
make_heap(arr.begin(), arr.end(), greater<int>()); // 1, 2, 4, 6, 3, 5
push_heap
添加元素。要求 arr[0…n-1] 必须已经是一个堆。
vector<int> arr{3, 1, 4, 6, 2, 5} // 3, 1, 4, 6, 2, 5
make_heap(arr.begin(), arr.end()); // 6, 3, 5, 1, 2, 4
arr.push_back(7); // 6, 3, 5, 1, 2, 4, 7
push_heap(arr.begin(), arr.end()); // 7, 3, 6, 1, 2, 4, 5
pop_heap
删除堆顶元素。要求 arr[0…n] 必须已经是一个堆。
vector<int> arr{3, 1, 4, 6, 2, 5} // 3, 1, 4, 6, 2, 5
make_heap(arr.begin(), arr.end()); // 6, 3, 5, 1, 2, 4
pop_heap(arr.begin(), arr.end()); // 5, 3, 4, 1, 2, 6
cout << arr.back(); // 6
arr.pop_back(); // delete 6
sort_heap
排序。要求 arr[0…n] 必须已经是一个堆。
vector<int> arr{3, 1, 4, 6, 2, 5} // 3, 1, 4, 6, 2, 5
make_heap(arr.begin(), arr.end()); // 6, 3, 5, 1, 2, 4
sort_heap(arr.begin(), arr.end()); // 1, 2, 3, 4, 5, 6