priority_queue优先队列
1.定义和初始化
- 初始化一个空的队列,按元素的值从大到小排列,值最大的在队首,名字为q(需要dataType是可以比较大小的,若为结构体需要重载比较运算符)
priority_queue<dataType>q;
- 初始化一个空的队列,按元素的值从小到大排列,值最小的在队首,名字为q
priority_queue<dataType,greater<>>q;
struct str { //重载小于号 这里的str实际上就是pair<int,int>
int first;
int second;
bool operator <(const str& a) const{
if (first == a.first)return second < a.second;
else return first < a.first;
}
};
//由于重载小于运算符时返回的是小于号,按普通排序应该小的排在前面,但优先队列(堆)是优先级大的在队首,故大的在前
priority_queue<str>q;
2.遍历
- priority_queue与queue一致,也不可以随机访问,故无法完整遍历之后还能保存元素
while(q.size()){
cout<<q.top()<<endl;//队首元素访问变为top()
q.pop();
}
3.内置方法
q.push(x);
dataType res=q.top();
q.pop();
4.提示
- 优先队列中的数据结构必须可以排序,不可以使用cmp比较函数,必须是在结构体中重写比较远算符
- 注意定义时候,若使用c/c++原有数据类型,写greater<>或less<>时不可以加(),与sort中不同,sort中要写为 greater<>()