优先队列的常用知识
queue:队头front,队尾back。插入push,删除pop
pqueue:堆顶:top,插入push,删除pop
1.是一个大根二叉堆,大根堆,大的在前
2.que.push(x),q.pop()的时间复杂度为O(logn)
3.如果优先队列想要储存结构体,需要对“<"运算符重载
(1).在结构体外重载
struct node { int id; int x,y; }v[55]; priority_queue<node>que; bool operator <(const node& a,const node& b){ if(a.x == b.x) return a.y > b.y; return a.x > b.x; }
(2).结构体内重载
struct node { int id; int x,y; bool operator < (const node& t)const{ if( x == t.x) return y < t.y; return x > t.x; } }v[55]; priority_queue<node>que;
4.priority_queue 实现小根堆
(1)重载,和第三个标题差不多
(2)对于int等内置数值类型,可以把插入的元素的相反数放入堆中
当我写迪杰斯特拉优先队列优化时候,就喜欢插入相反数而实现小根堆,注意double细节不同,之前因为double类型也相反数插入wa了好多次!!