STL中常用的数据结构

类型名称随机读取排序数组获得最大/小值删除最大/小值插入任意值删除任意值查找任意值备注
vector动态数组O(1)因为在尾部增删的复杂度是 O(1),我们也可以把它当作 stack 来用
list双向链表可以当作 stack 和 queue 来使用,链表不支持快速随机读取,因此我们很少用到这个数据结构。一个例外是经典的 LRU 问题,我们需要利用链表的特性来解决
deque双端队列O(1)又支持 O(1)时间的头部增删和尾部增删,不过有一定的额外开销
array固定大小数组一般在刷题时我们不使用
forward_list单向链表一般在刷题时我们不使用
stack后入先出(LIFO)的数据结构默认基于 deque 实现。stack 常用于深度优先搜索
queue先入先出(FIFO)的数据结构默认基于 deque 实现。queue 常用于广度优先搜索
priority_queue最大值先出的数据结构O(n log n)O(1)O(log n)O(log n)
set有序集合O(n log n)O(log n)O(log n)O(log n)元素不可重复,底层实现默认为红黑树,即一种特殊的二叉查找树(BST)。这里注意,set 和 priority_queue 都可以用于维护数据结构并快速获取最大最小值,但是它们的时间复杂度和功能略有区别,如priority_queue 默认不支持删除任意值,而 set 获得最大或最小值的时间复杂度略高,具体使用哪个根据需求而定。
multiset支持重复元素的 set。
map有序映射或有序表在 set 的基础上加上映射关系,可以对每个元素 key 存一个值 value。
multimap支持重复元素的 map。
unordered_set哈希集合O(1)O(1)O(1)常用于快速的查询一个元素是否在这个容器内
ubordered_multiset支持重复元素的 unordered_set。
unordered_map哈希映射或哈希表在 unordered_set 的基础上加上映射关系,可以对每一个元素 key 存一个值 value。在某些情况下,如果 key 的范围已知且较小,我们也可以用 vector 代替 unordered_map,用位置表示 key,用每个位置的值表示 value。
unordered_multimap支持重复元素的 unordered_map。

具体咋用?参考大神博客
C++ STL标准库:std::vector 使用详解
C++ STL标准库-数据结构
STL容器之数据结构图解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可峰科技

生活不易

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

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

打赏作者

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

抵扣说明:

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

余额充值