平时定义的时候,直接上就完事了:
priority_queue<int>Q;
默认大根堆。
之前很菜的时候不知道小根堆怎么写,还在考场上干过加个负号甩到大根堆里面去的蠢事。
它的完整形式呢,其实是长这个样子的:
//小根堆 priority_queue <int,vector<int>,greater<int> > Q; //大根堆 priority_queue <int,vector<int>,less<int> >Q;
然后就是一些特殊的情况:
用pair的时候,先按first,再按second 自动排序 。
priority_queue<pair<int,int> >Q;
如果要自定义排序的话,可以写一个$cmp$:
struct node{ int a,b; }num[N]; struct cmp { bool operator()(const int &p,const int &q) { if(num[p].b<num[q].b) return 1; else return 0; } }; priority_queue<int,vector<int>,cmp> Q;
To be continue...