C++学习:queue

queue队列

queue是一种先进先出(FIFO)的数据结构。queue提供了一组函数来操作和访问元素,但它的功能相对较简单。queue的定义和结构如下:

template>
class queue;

T:表示存储在queue中的元素的类型。
Container:表示底层容器的类型,默认为deque。也可以使用其他容器类型,如list。
queue的内部实现使用了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素。

queue的常用函数:

2.priority_queue优先队列

priority_queue与普通队列不同,priority_queue中的元素是按照一定的优先级进行排序的默认情况下,priority_queue按照元素的值从大到小进行排序,即最大元素位于队列的前面。priority_queue的定义和结构如下(仅做了解即可)
C++学习:queue_第1张图片

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, compare> pq;}

//方法二
auto compare=[](int a,int b){
// 自定义的比较函数,按照逆序排列
return a >b;
};

std::priority_queue, decltype(compare)> pq(compare);

//方法三(简单)
如果优先队列中的元素类型比较简单,可以直接使用greater来修改比较方法。
priority_queue,greater>pq;
std::greater函数对象定义在头文件中。

3.deque双端队列

deque(双端队列)是一种容器,它允许在两端进行高效的插入和删除操作。deque是由一系列连续的存储块(缓冲区)组成的,每个存储块都存储了多个元素。这使得deque能够在两端进行快速的插入和删除操作,而不需要移动其他元素。deque的定义和结构如下(仅做了解即可)

template>
class deque;

T:表示存储在deque中的元素的类型。
Allocator:表示用于分配内存的分配器类型,默认为allocatordeque的内部实现使用了一系列的存储块(缓冲区),每个存储块存储了多个元素,并且通过指针进行连接。
这种设计使得在两端进行插入和删除操作的时间复杂度为常数时间,即O(1)。
后续的算法课中的“单调队列”将使用双端队列来实现。
单纯考察双端队列的并不常见。

你可能感兴趣的:(C++算法,c++,学习,算法,开发语言,list)