一、priority_queue
priority_queue是优先队列,当向队列中放入数据时,它会自动调整队列顺序,使得它的队首元素一定是队列中优先级最高的。
1.定义
加入头文件#include<queue>,定义时与其他STL相同 priority_queue<数据类型>队列名。
2.访问
不同于queue,priority_queue之中没有front()和back()函数,访问时只能通过top()函数访问队列的队首元素,即优先级最高的元素。
3.常用函数
(1)push()
a.push(x)是让x进入到队列a中,时间复杂度为O(logN),N为当前队列的元素个数。
(2)top()
获得对首元素,即a.top(),时间复杂度为O(1)。
(3)pop()
令队首元素出队,不同于top(),pop()可以使队首元素离开队列,时间复杂度为O(logN),N为当前队列的元素个数。
(4)empty()
检查队列是否为空,该函数只有两种返回值,分别是true和false,时间复杂度为O(1)。
(5)size()
返回队列中元素的个数,时间复杂度为O(1)。
4.优先级设置
一般情况下,在int,double类型的队列中,数字越大的优先级越高,char类型的队列中,字典序越大的优先级越高。但是有一种方法可以设置优先级,priority_queue<int,vector<int>,less<int> >a,其中所有int可以换成其他类型,而less<int>表示数字大的优先级大,设置数字小的优先级大用greater<int>。
二、stack
一种后进先出的容器。
1.定义
添加头文件#include<stack>,定义时用 stack<数据类型>队列名。
2.访问
只能通过top()函数访问。
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int>a;
a.push(4);
a.push(3);
a.push(2);
cout<<a.top();
}
输出结果:2
3.常用函数
push(),pop(),top(),empty(),size(),且这五个函数的时间复杂度均为O(1)。
三、pair
可以看作是一个内部仅含有两种元素的结构体。
1.定义
添加头文件#include<utility>或者#include<map>,定义时用pair<int,char>a。如果想要直接初始化,可以选择pair<int,char>a(3,"hhh"),或a=pair<int,char>(3,"hhh"),或者使用函数 a=make_pair(3,"hhh")。
2.访问
pair中只有两种元素,因此直接用a.first和a.second可以直接代表这两种元素,直接访问就可以。
3.常用函数
两个pair可以直接比较,一般指比较first,如果first一样就比较second。
4.常见用途
可以直接代替只有两种类型的结构体,或作为map的键值对来插入。