queue

queue翻译为队列,在STL中主要则是实现了一个先进先出的容器。

头文件:

#include<queue>

1、queue的定义

queue<typename> name;

2、queue容器内元素的访问

由于队列(queue)本身就是一种先进先出的限制级数据结构,因此在STL中只能通过front()来访问队首元素,或是通过back()来访问队尾元素

3、queue常用函数实例解析

(1)push()

push(x)将x进行入队,时间复杂度为O(1)。

(2)front()、back()

front()和back()可以分别获得队首元素和队尾元素,时间复杂度为O(1)。

(3)pop()

pop()令队首元素出队,时间复杂度为O(1)。

(4)empty()

empty()检测queue是否为空,返回true则空,返回flase则非空。时间复杂度为O(1)。

(5)size()

size()返回queue内元素的个数,时间复杂度为O(1)。

priority_queue

priority_queue又称为优先队列,其底层是用堆来进行实现的。在优先队列中,队首元素一定是当前队列中优先级最高的哪一个

1、priority_queue的定义

priority_queue<typename> name;

2、priority_queue容器内元素的访问

和队列不一样的是,优先队列没有front()函数与back()函数,而只能通过top()函数来访问队首元素(也可以称为堆顶元素),也就是优先级最高的元素。

3、priority_queue常用函数实例解析

(1)push()

push(x)将x进行入队,时间复杂度为O(logN),其中N为当前优先队列中的元素个数。

(2)top()

top()可以获得队首元素(即堆顶元素),时间复杂度为O(1)。

(3)pop()

pop()令队首元素(即堆顶元素)出队,时间复杂度为O(logN),其中N为当前优先队列中的元素个数。

(4)empty()

empty()检测queue是否为空,返回true则空,返回flase则非空。时间复杂度为O(1)。

(5)size()

size()返回queue内元素的个数,时间复杂度为O(1)。

4、priority_queue内元素优先级的设置

(1)基本数据类型的优先级设置

此处指的基本数据类型就是int型、double型、char型等可以直接使用的数据类型,优先队列对它们的优先级设置一般是数字大的优先级高,因此队首元素就是优先队列内元素最大的哪个(如果char型,则是字典序最大的)。对于基本数据类型来说,下面两种优先队列的定义是等价的(以int型为例,注意最后两个>之间又一个空格):

priority_queue<int> q;
priority_queue<int,vector<int>,less<int> > q;

可以发现,第二种定义方式的尖括号内多了两个参数:一个是vector<int>,令一个是less<int>。其中vector<int>(也就是第二个参数)填写的是来承载底层数据结构堆(heap)的容器,如果第一个参数是double型或char型,则此处只需要填写vector<double>或vector<char>;而第三个参数less<int>则是对第一个参数的比较类,less<int>表示数字大的优先级越大,而great<int>表示数字小的优先级越大

因此,如果想让优先队列总是把最小的元素放在队首,只需进行如下定义。

priority_queue<int,vector<int>,great<int> > q;

(2)结构体的优先级设置

。。。