巧用優先佇列:過載運算子在STL優先佇列中的應用
阿新 • • 發佈:2021-10-05
寫優先佇列優化dijkstra的時候,需要放進優先佇列的常常有數值和編號兩類,以下介紹讓編號捆綁數值放入優先佇列的幾種方法。
前言
寫優先佇列優化dijkstra的時候,需要放進優先佇列的常常有數值和編號兩類,以下介紹讓編號捆綁數值放入優先佇列的幾種方法。
由於過程比較簡單,記住程式碼即可,下面不再講解,只附上程式碼,請讀者自行理解。
1.pair<>
#include<queue> priotity_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;//最小值優先 priotity_queue<pair<int,int>,vector<pair<int,int> >,less<pair<int,int> > > q;//最大值優先 priority_queue<pair<int,int> > q;//什麼都不加預設最大值優先; q.push(make_pair(w,v));// pair預設按前者大小排序,故權值之類要放到前邊; w=q.top().first; v=q.top().second;
2.結構體+比較函式
#include<queue>
struct ne{
int w;
int v;
};
struct cmp{
bool operator()(int &a,int &b){
return a>b; //最小值優先
}
};
struct cmp{
bool operator()(int &a,int &b){
return a<b; //最大值優先
}
};
priority_queue<ne,vector<ne>,cmp> q;
3.結構體+過載運算子
#include<queue>
struct ne{
int w;
int v;
bool operator < (const ne &a) const{
return w<a.w;//最大值優先
}
};
struct ne{
int w;
int v;
bool operator < (const ne &a) const{
return w>a.w;//最小值優先
}
};
priority_queue<int> q;
附:結構體內初始化及賦值
struct ne{ int x; int y; ne(){ x=0; y=0; } ne(int a,int b){ x=a;y=b; } }; //具體應用 queue<ne> q; //棧,佇列等的壓入; q.push(ne(x,y)); ne now; //結構體資料型別的賦值; now=ne(x,y);