方法一:priority_queue
这种方法需要#include<queue>
最基本的使用方法,对于一串数字建堆:
|
这种情况下默认为最大堆,也就是堆顶元素值最大。
如果需要建立最小堆,可以采用如下方式:
|
然而在多数情况下,我们还需要记录一些排序元素的额外信息,比如索引之类的,则需要以下三个步骤:
定义堆中需要存储的结构体:
struct Node{int x;int y;int val;Node(int a,int b,int valin):x(a),y(b),val(valin){}};
确定堆中元素的存储顺序,也就是最大堆还是最小堆
//设置比较函数,确定堆中元素的顺序,是最大堆还是最小堆,struct cmp{bool operator()(const Node &a,const Node &b){return a.val>b.val;//最小堆//return a.val<b.val;//最大堆}};
建堆
priority_queue<Node,vector<Node>,cmp> heap;//建堆heap.pop();//出堆heap.push();//入堆heap.top();//获取堆顶元素
方法二:利用vector
这种法法需要#include<algorithm>
#include <functional>
|