优先队列,也叫大根堆
定义优先队列:priority_queue<队列类型>队列名称
加入元素:队列名称.push(要加入的元素)
弹出栈顶元素:队列名称.pop()
获取栈顶元素:队列名称.top()
样例:
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
q.push(5);q.push(4);q.push(3);q.push(2);q.push(1);
for(int i=1;i<=5;i++)
{
cout<<q.top()<<endl;
q.pop();
}
}
小根堆
定义小根堆:priority<队列类型,vector<队列类型>,greater<队列类型> >队列名称
注意:两个'>'之间必须要有空格,否则会认为是运算符
vector动态数组(长度不定的数组)
greater比较级
其他函数跟大根堆一样。
样例:
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
q.push(5);q.push(4);q.push(3);q.push(2);q.push(1);
for(int i=1;i<=5;i++)
{
cout<<q.top()<<endl;
q.pop();
}
}
特殊队列(也就是结构体队列)
重载运算符(特殊队列必须要重载):
在结构体的定义里加上
bool operator <(data b)const{
return x<b.x;
}
加入元素:队列名称.push((data){队列元素,队列元素……})
注意:
如果运算符是'<',那么就是大根堆;如果运算符是'>',那么就是小根堆。
样例:
#include<iostream>
#include<queue>
using namespace std;
struct data{
int x,y;
bool operator <(data b)const{
return x<b.x;
}
};
priority_queue<data>q;
int main()
{
q.push((data){5,1});q.push((data){4,2});q.push((data){3,4});q.push((data){2,1});q.push((data){1,6});
for(int i=1;i<=5;i++)
{
cout<<q.top().x<<' '<<q.top().y<<endl;
q.pop();
}
}