使用优先级队列,默认大根堆(每次top()取到最大的元素)
priority_queue<int> a;
//等同于 priority_queue<int, vector<int>, less<int> > a;
小根堆的使用:
priority_queue<int, vector<int>, greater<int> > c;
自定义类型的优先级队列(常用):
struct Status {
int val;
ListNode *ptr;
//重载比较符,定义Status的大小由val决定,且由于此处要使用小根堆,
//所以写的方法和从大到小排序一样,返回自己的元素>对方元素
bool operator < (const Status &rhs) const {
return val > rhs.val;
}
};
priority_queue <Status> Q;
Status cur=Q.top();
Q.pop();
if(cur.ptr->next)
{
Q.push({cur.ptr->next->val,cur.ptr->next});
}
注意上面创建一个结构体的简洁写法,直接按定义结构体的顺序往{}里面填元素即可创建一个新的结构体变量