大根堆
priority_queue<int> heap
小根堆
priority_queue<int, vector<int>, greater<int>> heap
优先队列排序pair先比较第一个键值再比较第一个键值
//从大到小排序,先按照第一个从大到小排序再按照第二个从大到小排
priority_queue<PII> heap;
//升序排序pair,先按照first从小到大排再按照第二个键值对从大到小排
priority_queue<PII, vector<PII>, greater<PII>> heap;
对结构体排序
struct node
{
int val, idx;
//重载 < ,按照val升序idx降序排序,注意优先队列中的排序与vector当中相反
bool operator < (const node &b) const
{
if(val == b.val) return idx > b.idx;//按照idx降序
return val < b.val; //若要升序则填<,降序则填>,与vector当中相反
}
};
priority_queue<node> heap;
自定义排序规则(建议写结构体排序)
struct cmp1{
bool operator()(int x,int y)
{
return x>y;//小的优先级高 ,从小到大排
}
};
struct cmp2{
bool operator()(const int x,const int y)
{
return tmp[x]>tmp[y];
}
};
struct node{
int x,y;
friend bool operator<(node a,node b)
{
return a.x>b.x;//按x从小到大排
}
};
priority_queue<int>q1;
priority_queue<int,vector<int>,cmp1>q2;
priority_queue<int,vector<int>,cmp2>q3;
priority_queue<node>q4;