queue队列
queue是一种先进先出(FIFO)的数据结构。queue提供了一组函数来操作和访问元素,但它的功能相对较简单。queue的定义和结构如下:
template<class T,class Container = deque<T>>
class queue;
T:表示存储在queue中的元素的类型。
Container:表示底层容器的类型,默认为deque。也可以使用其他容器类型,如list。
queue的内部实现使用了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素。
queue的常用函数:

2.priority_queue优先队列
priority_queue与普通队列不同,priority_queue中的元素是按照一定的优先级进行排序的默认情况下,priority_queue按照元素的值从大到小进行排序,即最大元素位于队列的前面。priority_queue的定义和结构如下(仅做了解即可)
T:表示存储在priority_queue中的元素的类型。
Container:表示底层容器的类型,默认为vector。也可以使用其他容器类型,如deque
Compare:表示元素之间的比较函数对象的类型,默认为less,即按照元素的值进行比较。
priority aueue的内部实现使用了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素以下是一些priority queue的常用函数:
优先队列是一个十分重要的数据结构考察频率极高。
自动排序//默认是大根堆
接下来介绍几种优先队列修改比较函数的方法
//方法一
struct compare {
bool operator()(int a, int b){
// 自定义的比较函数,按照逆序排列
return a > b;}//小根堆
};
int main(){
std::priority queue<int, std::vector<int>, compare> pq;}
//方法二
auto compare=[](int a,int b){
// 自定义的比较函数,按照逆序排列
return a >b;
};
std::priority_queue<int, std::vector<int>, decltype(compare)> pq(compare);
//方法三(简单)
如果优先队列中的元素类型比较简单,可以直接使用greater<T>来修改比较方法。
priority_queue<int,vector<int>,greater<int>>pq;
std::greater函数对象定义在<functional>头文件中。
3.deque双端队列

deque(双端队列)是一种容器,它允许在两端进行高效的插入和删除操作。deque是由一系列连续的存储块(缓冲区)组成的,每个存储块都存储了多个元素。这使得deque能够在两端进行快速的插入和删除操作,而不需要移动其他元素。deque的定义和结构如下(仅做了解即可)
template<class T,class Allocator= allocator<T>>
class deque;
T:表示存储在deque中的元素的类型。
Allocator:表示用于分配内存的分配器类型,默认为allocatordeque的内部实现使用了一系列的存储块(缓冲区),每个存储块存储了多个元素,并且通过指针进行连接。
这种设计使得在两端进行插入和删除操作的时间复杂度为常数时间,即O(1)。
后续的算法课中的“单调队列”将使用双端队列来实现。
单纯考察双端队列的并不常见。
