STL——queue队列
-
概念:队列,先进先出
-
头文件:
#include<queue>
using namespace std;
-
定义:
queue<typename> name;
typename可以是任何基本数据类型或者容器 -
常用函数:
push(元素x): 元素x入队,复杂大O(1)
pop(): 队首元素出队(删除头元素)
front(): 取队头元素
back(): 取队尾元素
size(): 队列长度
empty(): 检测队列是否为空,空返回true,否则false
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int> qu; //定义队列
for(int i=1;i<=5;i++){ //将队列放入元素
qu.push(i);
}
cout<<qu.size()<<endl; //输出队列长度
cout<<qu.front()<<endl; //输出队列首元素
cout<<qu.back()<<endl; //输出队列尾元素
for(int i=1;i<=5;i++){ //所有元素出队列
qu.pop();
}
if(qu.empty()){ //判断队列是否为空
cout<<"队列为空";
}
return 0;
}
输出:
5
1
5
队列为空
- 常见用途:
- 广度遍历,使用队列
- 其他用途
priority_queue优先队列
-
概念:优先队列会随时调整结构,使每次的队首元素优先级最大
-
头文件:与普通队列相同
-
定义:
priority_queue<typename> name;
typename可以是数据类型或者容器 -
常用函数:
push(); pop(); size(); empty();
top(): 取队首元素(优先级最高)
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int> qu;
qu.push(1);
qu.push(2);
qu.push(3);
cout<<qu.top(); //取队首最高优先级元素3
return 0;
}
输出:3
- priority_queue队列优先级设置
(1). int、double、char基本类型:
默认:按数字大的优先级大,字母ASCII码值大的优先级大
升序:priority_queue<char, vector<char>, greater<char> > qu;
,数字小的优先级高,第三个参数为less<char>则为默认降序
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<char, vector<char>, greater<char> > qu;
qu.push('a');
qu.push('b');
qu.push('A');
cout<<qu.top(); //取队首最高优先级元素A
return 0;
}
输出:A
- 常见用途:
- 优先队列解决贪心问题
- 对Dijkstra算法进行优化