方法一: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>
| 
 |