全部博文(930)
分类: C/C++
2010-08-08 12:31:38
heap的常用操作可以使用stl的四种函数实现
1. 头文件如下
#include
#include
#include
#include
using namespace std;
2. 建堆:
vector
for(i=0;i
int y;
cin>>y;
a[i]=y;
}
make_heap(a.begin(),a.end(), cmp);
3. 取最小值(后两句一定要成对出现!!)
x=a.front();
pop_heap(a.begin(),a.end(), less
a.pop_back(); // 删除最后一个数据
4. 在堆中插入元素
cin>>x;
a.push_back(x);
push_heap(a.begin(),a.end(),cmp);
5. 堆排序
sort_heap(a.begin(),a.end(),cmp);
ps1:cmp函数与sort()中的cmp用法类似,参数为比较元素的类型,如cmp(int a,int b), cmp(node a, node b)。cmp是bool型,if (a < b ) return true; else return false。这里可以参看help中的说明:
User-defined predicate function object that defines sense in which one element is less than another. A binary predicate takes two arguments and returns true when satisfied and false when not satisfied.
ps2: less
再附上我自己的调试程序,可以看看
#include
#include
#include
#include
using namespace std;
int main()
{
int n;
int i;
int j;
int x;
cin>>n;
vector
//建堆
for(i=0;i
int y;
cin>>y;
a[i]=y;
}
make_heap(a.begin(),a.end(), less
//取最小值
x=a.front();
cout<
pop_heap(a.begin(),a.end(), less
a.pop_back(); // 删除最后一个数据
//插入元素
cin>>x;
a.push_back(x);
// push_heap(a.begin(),a.end(),cmp);
push_heap(a.begin(),a.end(),less
//堆排序
// sort_heap(a.begin(),a.end(),cmp);
sort_heap(a.begin(),a.end(),less
for(i=0;i
}