例子
less<int>()
指下一层比上一层小
大堆
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int ia[9] = {0, 1, 2, 3, 4, 8, 9, 3, 5};
vector<int> ivec(ia, ia+9);
// 堆初始化,默认大堆
// 下面等价于make_heap(&ivec[0], &ivec[9])
make_heap(ivec.begin(), ivec.end());
// 9 5 8 3 4 0 2 3 1
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
// 插入元素
ivec.push_back(7);
// 下面等价于push_heap(&ivec[0], &ivec[10]),10为新vector的长度
push_heap(ivec.begin(), ivec.end());
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
// 弹出堆顶,大堆->最大值
int max = ivec[0]; // 9
pop_heap(ivec.begin(), ivec.end());
ivec.pop_back();
// 8 7 4 3 5 0 2 3 1
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
//堆排序,默认从小到大
sort_heap(ivec.begin(), ivec.end());
//0 1 2 3 3 4 5 7 8 9
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
sort_heap(ivec.begin(), ivec.end(),
}
小堆
greater<int>()
指下一层比上一层大
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int ia[9] = {0, 1, 2, 3, 4, 8, 9, 3, 5};
vector<int> ivec(ia, ia+9);
make_heap(ivec.begin(), ivec.end(), greater<int>());
// 0 1 2 3 4 8 9 3 5
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
ivec.push_back(7);
push_heap(ivec.begin(), ivec.end(), greater<int>());
0 1 2 3 4 8 9 3 5 7
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
int min = ivec[0]; // 0
pop_heap(ivec.begin(), ivec.end(), greater<int>());
ivec.pop_back();
// 1 3 2 3 4 8 9 7 5
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
sort_heap(ivec.begin(), ivec.end(), greater<int>());
// 9 8 7 5 4 3 3 2 1
for(int i=0;i!=ivec.size();i++)
cout<<ivec[i]<<" ";
cout<<endl;
}