1 2 3 4 5 6 7 8 |
struct cmp{ bool operator () (int a,int b){ return vertex[a].dis > vertex[b].dis; } }; priority_queue<int,vector<int>,cmp> q; |
下面是转的:
注:
- less<class T>这是大顶堆,按值大的优先,值大的在最上面。greater<class T>这是小顶堆,按值小的优先,值小的在最上面。
- 自定义cmp如果还有不明白的看这里:
123456789struct cmp{bool operator()(const int &a,const int &b)//这里的&是引用{return a>b;//最大堆return a<b;//最小堆}};priority_queue< int, vector<int>, cmp > - 还是自定义cmp函数,注意,一般ACM中用结构体内含“bool operator()(const int &a,const int &b)”。这其实等价于Class cmp,不过更省事,当然也不规范(不需要规范)。
- return就是希望如何排列为true。如果希望由大到小,就将大到小的情况return;反则亦然。和sort的自定义cmp是一样的。