堆STL和過載運算子
阿新 • • 發佈:2018-11-11
- 大根堆:
1.priority_queue<int> q;【預設
2. priority_queue< node,vector<node>,less<node> > q;【自帶比較函式
- 小根堆:
priority_queue< node,vector<node>,greater<node> > q;【自帶比較函式
- 過載運算子:
1.定義struct node 之後過載
1 priority_queue<node>q;//或 priority_queue< node,vector<node>,less<node> >q; 2 bool operator<(node a,node b)//或寫做(const node &a,const, node &b) 更快 3 { 4 return a.y>b.y;//以y從大到小排序 5 }
2.在定義struct node時過載
1 struct node 2 { 3 int id,v; 4 bool operator<(const node &a) const{ 5 return v<a.v;//以v從大到小排序(即當前值小於上一個值 6 } 7 }; 8 priority_queue<node>q;
注:若要從小到大排序,則定義時用 priority_queue< node,vector<node>,greater<node> > q;
過載時用第一種方法要 return a.y<b,y,用第二種方法要return v>a.v;
3.定義友元操作類過載函式
1 struct node 2 { 3 intv; 4 friend bool operator<(const node &a,const node &b){ 5 return a.v<b.v; //按v從大到小排列 6 } 7 }; 8 priority_queue<node>q;
- 自定義比較函式模板結構
1 struct cmp 2 { 3 bool operator ()(const node &a, const node &b) 4 { 5 return a.v>b.v;// 按照v從小到大排列 6 } 7 }; 8 priority_queue<node,vector<node>,cmp> q;