1. 程式人生 > 其它 >巧用優先佇列:過載運算子在STL優先佇列中的應用

巧用優先佇列:過載運算子在STL優先佇列中的應用

寫優先佇列優化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);