今天作題用到了優先隊列 對它的用法還不是很熟悉 如今整理一下。node
#include<queue> using namespace std;
不過我都用bits/stdc++.h...c++
priority_queue<Type, Container, Functional>數據結構
Type是數據的類型 好比int啊char啊之類的less
Container是容器類型默認是vector函數
Functional是比較的方式 好比greater<int> less<int> 或者本身定義的比較函數spa
priority_queue <int> q;
這是最基本的用法 不須要像定義同樣傳三個參數進去 只須要聲明一個數據類型便可設計
須要注意的是 優先隊列是默認從大到小排的!code
//升序隊列 priority_queue <int,vector<int>,greater<int> > q; //降序隊列 priority_queue <int,vector<int>,less<int> >q;
由於聲明瞭比較的方式,此次必需要傳三個參數進去了blog
須要注意的是:排序
typedef struct node { int num; friend bool operator < (const node & a,const node & b) { return a.num < b.num ; } }point;
這個方法是將運算符的重載在結構體的定義中完成,優先隊列的的定義中就不須要傳三個參數了 在這個小例子裏看起來沒什麼用 不過解決複雜問題時,就須要採用結構體來設計數據結構 也就必需要告訴計算機,比較的方式。
須要注意的是:
typedef struct node { int num; bool operator<(const node&b)const { return num<b.num; } }point;
priority_queue<point>q;
和採用friend bool operator的方法1同樣,只是寫法略有不一樣 我不喜歡用 感受亂亂的....
struct node1 { int x; }; struct node2 { bool operator() (node1 a, node1 b) { return a.x < b.x; } }; priority_queue<node1, vector<node1>, node2> p;
重寫仿函數這個用起來真麻煩呀....須要聲明兩個結構體 不喜歡用....