queue是队列
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int> q;
for(int i = 1;i<=5;i++){
q.push(i);//push(i)来将i压进队列,因此依次入队1,2,3,4,5
}
cout<<q.front()<<" "<<q.back()<<endl;
//队列只能用front来取队头,用back取队尾
return 0;
}
- push()入队
- pop()入队
- empty()判空
- size()返回个数
- 在使用front()和pop()函数前,必须用empty()判断队列是否为空。
priority_queue优先队列:底层是用堆来实现的,在优先队列中,队首元素一定是当前队列中优先级最高的那个。
其实按照这个说法,就是有了排序貌似和set没有什么区别,不过我现在的理解是,set默认是从小到大排序的,而优先队列是从大到小。
//这两个定义是等价的
priority_queue<int> q;
priority_queue<int,vector<int>,less<int> > q;
//第三个参数,less表示数字大的优先级越大,而greater<int>表示数字小的优先级越大
//其中第二个参数是用来承载底层数据结构堆的容器,如果第一个参数是double,相应地改为vector<double>
所以,如果想让优先级队列总是把最小的元素放在队首,只需要下列定义
priority_queue<int,vector<int>,greater<int> > q;
下面是一个示例:
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int> > q;
q.push(3);
q.push(4);
q.push(1);
cout<<q.top();//top是获取队首元素(即堆顶元素)
return 0;
}
priority_queue可以解决一些贪心问题,也可以对Dijkstra算法进行优化(因为优先队列的本质是堆)。
stack(栈)函数用法什么的都和队列是一样的,无非是后进先出,只能获取top元素。