文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>stl heap使用

stl heap使用

时间:2010-08-08  来源:ubuntuer

heap的常用操作可以使用stl的四种函数实现

1. 头文件如下

#include <iostream>
#include <vector>
#include <algorithm>   
#include <functional>   
using namespace std;   

2. 建堆:
vector<int> a(n);    
   for(i=0;i<n;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<int>() );    
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中的说明:

_Comp

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<int>()是系统封装的对int使用的cmp(),可以使用

再附上我自己的调试程序,可以看看

#include <iostream>
#include <vector>
#include <algorithm>   
#include <functional>   
using namespace std;   


int main()
{

int n;
int i;
int j;
int x;
cin>>n;
vector<int> a(n);   
    //建堆
for(i=0;i<n;i++)
{
   int y;
   cin>>y;
   a[i]=y;
}
make_heap(a.begin(),a.end(), less<int>());  
    //取最小值   
    x=a.front();
cout<<x<<endl;
cin.get();
    pop_heap(a.begin(),a.end(), less<int>() );   
    a.pop_back(); // 删除最后一个数据   
    //插入元素   
cin>>x;
    a.push_back(x);   
//    push_heap(a.begin(),a.end(),cmp);
push_heap(a.begin(),a.end(),less<int>());
    //堆排序   
//    sort_heap(a.begin(),a.end(),cmp);   
sort_heap(a.begin(),a.end(),less<int>());
for(i=0;i<a.size();i++)
   cout<<a[i]<<" ";
return 0;
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载