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)结构体的优先级设置
。。。
文章有(1)条网友点评
到此一游