1. 程式人生 > >堆STL和過載運算子

堆STL和過載運算子

  • 大根堆:

    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     int
v; 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;