使用stl实现heap

#include "stdafx.h"

#include
#include
#include
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 vectorvi;
 int i;
 for(i=1;i<10;i++)
  vi.push_back(i);
 make_heap(vi.begin(),vi.end());//make_heap use O(n) time

//默认是建大根堆,也可以自己添加比较函数,也可以实现对象的建堆

//make_heap(Node.begin(),Node.end(),cmp);

struct node
{
   int num,per,nownum;
};
bool cmp(node a,node b)
{
   if(a.nownum>b.nownum)return true;
   if(a.nownum == b.nownum)
   {
       if(a.num>b.num)return true;
   }
   return false;
}

//以上为以node节点为对象的heap,用自己定义的cmp函数进行比较
 cout< pop_heap(vi.begin(),vi.end());//把heap的头元素放到vector的末尾,并且堆的长度减1
 cout< vi.pop_back();//必须使vector的end()也少1,否则在进行第二次pop_heap时会出错,因为此时的heap范围已 经不是begin(),与end()之间了,或者可以用end() - 1代替具体的heap的数据范围,但是这样必然是不方便,而且不提倡的。
 pop_heap(vi.begin(),vi.end());
 cout< return 0;

//要插入堆元素,先vi.push_back(num),再进行调整push_heap(vi.begin(),vi.end());

你可能感兴趣的:(c/c++)