【容器】stack、queue、priority_queue、deque、set、map、unordered_map、unordered_set、multiXXX、unordered_multiXXX

stack

stack是一个容器适配器。栈是一种具有后进先出特性的数据结构。

  • 它基于某个底层容器实现栈的功能。默认情况下,stack使用deque作为底层容器,但也可以使用其他容器,如vector或list。
  • 不支持随机访问

push():将元素入栈,即将添加到栈顶。

pop():移除栈顶的元素,并返回该元素的值。注意,这个操作会改变栈的大小。

top():获取栈顶元素的值,但不移除该元素。即查看栈顶元素的值而不弹出它。

empty():检查栈是否为空,如果栈为空则返回true,否则返回false。

size():获取栈中元素的数量。

queue

queue是一个容器适配器。队列是一种具有先进先出特性的数据结构,类似于现实生活中的排队。

  • 容器适配器:queue实际上是一个容器适配器,它基于某个底层容器实现队列的功能。默认情况下,queue使用deque作为底层容器,但也可以使用其他容器,如list。
  • 不支持随机访问

push():将元素入队,即将添加到队尾。

pop():移除队首的元素,即移除队列中最早入队的元素。

front():获取队首元素的值,但不移除该元素。

back():获取队尾元素的值,但不移除该元素。

empty():检查队列是否为空,如果队列为空则返回true,否则返回false。

size():获取队列中元素的数量。

priority_queue

priority_queue是一个容器适配器。优先队列是一种特殊的队列,其中每个元素都有一个优先级,优先级高的元素具有较高的处理优先级。

  • priority_queue实际上是一个容器适配器。默认情况下,priority_queue使用vector作为底层容器,但也可以使用其他容器,如deque。
  • 不支持随机访问
  • 默认情况下priority_queue是大堆

push(item):将元素item入队,即将item添加到优先级队列中。队列会根据元素的优先级自动调整顺序,使优先级最高的元素位于队首。

pop():移除队首的元素,即移除优先级最高的元素。

top():获取队首元素的值,但不移除该元素。即查看队首元素的值而不弹出它。

empty():检查优先级队列是否为空,如果队列为空则返回true,否则返回false。

size():获取优先级队列中元素的数量。

deque

deque是一个双端队列容器。它是一种动态分配的、可变长度的序列容器,允许在两端进行高效的插入和删除操作。可以在头尾两端进行插入和 删除操作,且时间复杂度为O(1),

  • 与vector比较,头插效率高,不需要搬移元素;deque 支持随机访问,可以通过索引快速访问其中的元素。deque 具有动态大小,可以在运行时根据需要自动扩展。
  • 不连续内存:与连续内存的容器(如vector)不同,deque 使用多个连续的内存块来存储元素,这使得在两端进行插入和删除操作更加高效。
  • 与list比较,其底层是连续空间,空间利用率比较高,不需要存储额外字段。
  • deque是一种非常灵活的数据结构,适用于需要在两端执行插入和删除操作的情况,同时也支持高效的随机访问

push_back(item):将元素item添加到std::deque的尾部。

push_front(item):将元素item添加到std::deque的头部。

pop_back():移除std::deque的尾部元素。

pop_front():移除std::deque的头部元素。

back():获取std::deque的尾部元素的值,但不移除该元素。

front():获取std::deque的头部元素的值,但不移除该元素。

empty():检查std::deque是否为空,如果为空则返回true,否则返回false。

size():获取std::deque中元素的数量。

set

set是一个容器,它提供了一种有序、不重复的元素集合

  • 它基于红黑树数据结构实现,这使得插入、删除和查找操作的平均时间复杂度为O(log n)。
  • set中的元素按照严格的弱排序方式排列(set中的元素默认按照小于来比较),并且使用set的迭代器遍历set中的元素,可以得到有序序列.
  • set中的元素是唯一的,不允许重复

insert(value):插入一个值为value的元素到std::set中。如果该元素已经存在,插入操作会被忽略。

erase(value):从std::set中移除值为value的元素。

find(value):查找std::set中是否包含值为value的元素。如果找到,返回指向该元素的迭代器;如果没有找到,返回end()迭代器。

count(value):统计std::set中值为value的元素的个数,通常为0或1(因为std::set中元素唯一)。

map

map是一个关联容器,它提供了一种基于键-值对的数据结构。map基于红黑树实现,允许通过键来快速访问对应的值。

  • map中的元素以键-值对的形式存储。每个键在map中是唯一的,而值可以重复。map中的key是唯一的,并且不能修改.
  • map根据key对元素进行排序。默认情况下,键按照严格弱排序方式(小于)排列,也可以通过自定义比较函数来定义排序规则。
  • 对map中的元素进行迭代时,可以得到一个有序的序列

insert(pair):插入一个键值对(std::pair类型)到std::map中。如果该键已经存在,插入操作会被忽略。

erase(key):从std::map中移除指定键的键值对。

find(key):查找std::map中是否包含指定键,并返回指向该键值对的迭代器。如果没有找到,返回end()迭代器。

unordered_set

unordered_set是关联容器,它是基于哈希表实现的,unordered_set中的元素是唯一的,不允许重复。

  • 与set不同,unordered_set中的元素没有特定的顺序。元素在哈希表中的位置是根据其哈希值计算得出的,因此无法按照特定的顺序进行迭代。
  • 它适用于需要高效查找和去重的场景,但不提供有序性

unordered_map

unordered_map是关联容器,它是基于哈希表实现的,用于存储一组键值对。

  • 每个键都是唯一的,用于唯一标识对应的值。
  • 与map不同,unordered_map中的键值对没有特定的顺序。键值对在哈希表中的位置是根据键的哈希值计算得出的,因此无法按照特定的顺序进行迭代。
  • 它适用于需要高效查找和修改键值对的场景,但不提供有序性

multiset

multiset在set中,每个元素的键是唯一的,而在multiset中,键可以重复出现。也就是说,set中的元素是唯一的,而multiset中的元素可以有相同的键。

multimap

multimap在map中,每个键是唯一的,而在multimap中,键可以重复出现。也就是说,map中的键是唯一的,而multimap中的键可以有相同的键。

unordered_multiset

unordered_multiset容器与unordered_set容器的底层数据结构是一样的,都是哈希表,这两种容器唯一的区别就是,unordered_multiset容器允许键值冗余,即unordered_multiset容器当中存储的元素是可以重复的。

unordered_multimap

unordered_multimap容器与unordered_map容器的底层数据结构是一样的,都是哈希表,这两种容器唯一的区别就是,unordered_multimap容器允许键值冗余,即unordered_multimap容器当中存储的键值对的key值是可以重复的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珠江上上上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值