學習算法過程中經常會遇到堆,而STL中的priority_queue是(優先隊列)就是一個封裝好的堆結構。
轉載自:https://blog.csdn.net/xiaoquantouer/article/details/52015928
1、頭文件
#include<queue>
2、普通定義方法
priority_queue<int> p;
3、更一般的定義方法
priority_queue<Type, Container, Functional>
Type爲數據類型, Container爲保存數據的容器,Functional爲元素比較方式。
如果不寫後兩個參數,那麼容器默認用的是vector,比較方式默認用operator<,也就是優先隊列是大頂堆,隊頭元素最大。
4、優先輸出小數據
priority_queue<int, vector<int>, greater<int> > p;
5、自定義優先級,重載默認的 < 符號
struct Node{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
};
struct cmp{
bool operator()(Node a, Node b){
if(a.x == b.x) return a.y>b.y;
return a.x>b.x;
}
};
priority_queue<Node, vector<Node>, cmp>p;
6、常用函數
p.push(x);//把x加入堆
x=p.top();//得到堆頂元素
p.pop();//刪除堆頂元素