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)
相关推荐
灵晔君2 小时前
【C++】标准模板库STL——set /multiset/map /multimap
开发语言·c++
noipp2 小时前
推荐题目:洛谷 P13554 【MX-X15-T1】奶龙龙
c语言·数据结构·c++·算法·编程·洛谷
库玛西4 小时前
深入剖析 Linux 线程机制与分页式存储管理
linux·服务器·c++·笔记
众少成多积小致巨4 小时前
Android C++ 编码规范指南
android·c++·google
Yyyyyy~4 小时前
【C++】字符串
c++
wWYy.4 小时前
Pimpl模式
c++
aramae5 小时前
C++11:现代C++的里程碑
c语言·开发语言·c++·windows·git·后端
啦啦啦啦啦zzzz6 小时前
c++web服务器框架Oat++的API应用
服务器·c++·oat++
Irissgwe6 小时前
算法之二分查找
数据结构·c++·算法·二分查找