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(也可 vector、list) --- 栈顶 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)
相关推荐
weixin_307779137 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
Frank_refuel11 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
hetao173383712 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
longlongzihan13 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
潼心1412o16 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
-森屿安年-16 小时前
按身高排序
c++·算法
(Charon)17 小时前
【C++面试】vector底层原理:扩容、拷贝移动与迭代器失效
c++·面试
朔北之忘 Clancy18 小时前
青少年软编等考七级题解目录
开发语言·c++·青少年编程·gesp·csp·信奥赛·noi
汉克老师18 小时前
GESP2026年9月认证C++七级( 第一部分选择题(8~15题)精讲
c++·gesp·小学生·学c++编程
Mr_Macallon18 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习