如何使用
调用头文件<algorithm>中的make_heap函数是某容器内元素堆化,默认使用的比较函数是less<T>(),默认生成大根堆。
若在第三个参数指定比较函数即可以生成不同的堆,对使用great<T>()可以生成小根堆
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> v{0,1,2,3,4,5,6,7,8,9};
//堆化,使用greater形成小根堆,less形成大根堆
make_heap(v.begin(),v.end(),greater<int>());
//插入新元素需要两步
//第一步,在尾部插入元素
v.push_back(10);
//第二部,重新堆化,注意push_heap时也需要使用相同的比较函数
push_heap(v.begin(),v.end());
//弹出当前堆最顶部元素,将其移到容器最后,并将剩下的元素重新堆化
pop_heap(v.begin(),v.end(),greater<int>());
//判断当前容器是否是一个堆,如果使用自定义排序函数则需要传入这个函数
is_heap(v.begin(),v.end(),greater<int>());
v.pop_back();
is_heap(v.begin(),v.end(),greater<int>());
//将堆元素中排序为有序序列,默认从小到大排序,可以指定排序函数
/*该方法如果选用的比较函数一样的话,会使大根堆变为小根堆,小根堆变为大根堆。该方法只对堆有效,对于不是堆的容器无效
* 注意一定得是比较函数相同才翻转大小根堆
*/
sort_heap(v.begin(),v.end(),greater<int>());
return 0;
}