以priority_queue为例。
如果我要写一个元素类型为整型的大根堆,那么直接用STL的优先队列就可以了。
#include <cstdio>
#include <queue>
using namespace std;
priority_queue <int> Q;
int main()
{
Q.push(1);
printf("%d\n",Q.top());
Q.pop();
return 0;
}
但有些时候我们需要使用小根堆,直接使用STL还是可以实现的。
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
priority_queue <int,vector<int>,greater<int> > Q;
int main()
{
Q.push(1);
Q.push(2);
printf("%d\n",Q.top());
Q.pop();
return 0;
}
输出是1,符合小根堆。简单地理解一下,greater<int>是int的比较函数,这个位置原本放的应该是“小于”的比较函数,但是这时我放了一个“大于”的比较函数上去,比较函数恰好反了过来,那么原来大根堆就变成小根堆了。
如果要自定义元素类型?
#include <c