C++ STL 容器使用的底层数据结构

STL 容器 底层数据结构 查找 插入 删除
vector 动态数组 O(1) 随机访问 尾部 O(1)(均摊) 中间 O(n)
array 静态数组 O(1) 不支持扩容 不支持
deque 分段连续数组(Map + Block) O(1) 两端 O(1) 两端 O(1)
list 双向链表 O(n) O(1) O(1)
forward_list 单向链表 O(n) O(1) O(1)
set 红黑树 O(log n) O(log n) O(log n)
multiset 红黑树 O(log n) O(log n) O(log n)
map 红黑树 O(log n) O(log n) O(log n)
multimap 红黑树 O(log n) O(log n) O(log n)
unordered_set 哈希表 平均 O(1) 平均 O(1) 平均 O(1)
unordered_map 哈希表 平均 O(1) 平均 O(1) 平均 O(1)
unordered_multiset 哈希表 平均 O(1) 平均 O(1) 平均 O(1)
unordered_multimap 哈希表 平均 O(1) 平均 O(1) 平均 O(1)
stack 默认 deque(也可 vectorlist --- 栈顶 O(1) 栈顶 O(1)
queue 默认 deque --- 尾部 O(1) 头部 O(1)
priority_queue 二叉堆(Heap) 最大值 O(1) O(log n) O(log n)
STL 算法 底层算法 时间复杂度
sort() Introsort(快速排序 + 堆排序 + 插入排序) O(n log n)
stable_sort() 归并排序 O(n log n)
partial_sort() 堆排序 O(n log k)
nth_element() Introselect(快速选择) 平均 O(n)
make_heap() 建堆 O(n)
push_heap() 堆上滤 O(log n)
pop_heap() 堆下滤 O(log n)
binary_search() 二分查找 O(log n)
lower_bound() 二分查找 O(log n)
upper_bound() 二分查找 O(log n)
equal_range() 二分查找 O(log n)
find() 顺序查找 O(n)
find_if() 顺序查找 O(n)
count() 顺序遍历 O(n)
for_each() 顺序遍历 O(n)
transform() 顺序遍历 O(n)
copy() 顺序复制 O(n)
copy_if() 顺序复制 O(n)
remove() 双指针(快慢指针) O(n)
unique() 双指针 O(n)
reverse() 双指针交换 O(n)
rotate() 三次翻转/循环移动 O(n)
merge() 归并 O(n)
set_union() 双路归并 O(n)
set_intersection() 双路归并 O(n)
set_difference() 双路归并 O(n)
min_element() 顺序扫描 O(n)
max_element() 顺序扫描 O(n)
accumulate() 累加 O(n)
相关推荐
汉克老师34 分钟前
CSP-J 初赛(以满分为目标):第四课《看懂计算机到底在算什么!——C++变量、表达式和运算符 》
c++·小学生·学c++编程
小小龙学IT1 小时前
zstd(Zstandard)开源压缩库实战指南:让数据又快又小
c++·开源
小小龙学IT1 小时前
GLM 开源图形学数学库深度解析:从向量、矩阵到四元数的完整实战
c++·矩阵·开源·mfc
Severus_black1 小时前
【C++初阶】类和对象(中)
c++
qz5zwangzihan12 小时前
AtCoder高频英文词汇短语
c++·atcoder·高频词
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的类型特征( type_traits)
java·c++·面试
小小龙学IT2 小时前
C++ 性能优化:CPU 缓存与数据布局优化深度解析
c++·缓存·性能优化
玉树临风ives3 小时前
atcoder ABC 472 题解
数据结构·c++·算法
张张的快乐时光呀!3 小时前
MFC添加类向导并实现响应
c++·mfc
程与留4 小时前
09_Qt 布局管理系统——QHBoxLayout、QVBoxLayout、QGridLayout
c++·qt