queue
1.queue
1) queue 的定义与结构
template <class T, class Container = deque<T>>
class queue;
-
queue 是一个先进先出(FIFO)的数据结构;
-
其中T表示 stack 中存放的数据类型;
-
Contaier:表示底层容器的类型,默认参数;
2)queue 的一些常用函数
1)push(x) 在队尾插入元素x ,时间复杂度为O(1);
2)pop() 弹出队首元素 ,时间复杂度为O(1);
3)front() 返回队首元素,时间复杂度为O(1);
4)back() 返回队尾元素,时间复杂度为O(1);
4)empty() 检查 queue 是否为空,时间复杂度为O(1);
5)size() 返回 queue 中的元素个数,时间复杂度为O(1);
2.priority_queue() 队列
1) priority_queue 的定义与结构
-
默认情况下,priority_queue() 按照元素从大到小进行排序,即最大的元素在队列最前面,为 top()值;
template <class T, class Container = vector<T>,class Compare = less<typename Container::value_type>>
class priority_queue;
-
其中T表示 stack 中存放的数据类型;
-
Contaier:表示底层容器的类型,默认参数;
-
Compare:比较函数,默认为less,即按照从大到小的
2)priority_queue 的一些常用函数
1)push(x) 在优先队列中插入元素x ,时间复杂度为O(logN);
2)pop() 弹出优先队列的顶部元素 ,时间复杂度为O(logN);
3)top() 返回优先队列顶部的元素,时间复杂度为O(1);
4)empty() 检查优先队列是否为空,时间复杂度为O(1);
5)size() 返回优先队列中的元素个数,时间复杂度为O(1);
3)改变比较函数
-
默认情况:priority_queue<int ,vector<int>,less<int> > pq; 平时cmp函数缺省,默认使用 less<int>,形成大根堆(每个父节点都大于子节点,使得此队列队首元素为最大);
-
如果元素类型比较简单,只是单纯的逆序排序则使用 greater<int>,形成小根堆;
3.deque 双端队列
-
双端队列其实就是在队列 queue 的基础上在队列的两端都可以实现数据的插入和弹出;
常用函数
1)push_back( ) 和 push_front( ) 用来向 deque 的尾端或者首端插入一个元素;
2)pop_back() 和 pop_front() 用来去除 deque 的尾端或者首端一个元素,在使用前要先判断 deque 是否为空;
3)size() 返回 deque 此时存有的元素个数;
4)empty( ) 用来检查 deque 是否为空;
5)clear( ) 用来清空 deque 的所有元素;
6)front( ) 和 back( ) 用来返回 list 里面第一个元素或最后一个元素的的引用;
注意:至于 insert 和 erase 不是没有,而是不常用,使用双端队列一般便不再操作中间的某个数;