#include "stdafx.h"
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector<int>vi;
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<<vi.front()<<endl;
pop_heap(vi.begin(),vi.end());//把heap的头元素放到vector的末尾,并且堆的长度减1
cout<<vi.back()<<endl;
vi.pop_back();//必须使vector的end()也少1,否则在进行第二次pop_heap时会出错,因为此时的heap范围已 经不是begin(),与end()之间了,或者可以用end() - 1代替具体的heap的数据范围,但是这样必然是不方便,而且不提倡的。
pop_heap(vi.begin(),vi.end());
cout<<vi.back()<<endl;
return 0;
}
//要插入堆元素,先vi.push_back(num),再进行调整push_heap(vi.begin(),vi.end());