STL-map
map
存储
key-value
,==key唯一==底层:红黑树。红黑树参考:RBTree
是否有序:有序(key升序)
unordered_map
存储
key-value
,==key唯一==底层:哈希表。
是否有序:无序
multimap
存储
key-value
,==key不唯一==(一个key对应多个value)底层:红黑树。
是否有序:有序(key升序)
unordered_multimap
存储
key-vlaue
,==key不唯一==(一个key对应多个value)底层:哈希表。
总结:
- 带有
unordered
就是哈希表,没有unordered
就是红黑树 - 带有
multi
就是可重复key
横向对比
有序用树,高速用哈希,重复用multi,唯一用map
特性 | map |
multimap |
unordered_map |
unordered_multimap |
---|---|---|---|---|
底层结构 | 红黑树(平衡二叉搜索树) | 红黑树 | 哈希表(Hash Table) | 哈希表 |
元素顺序 | 有序(默认升序) | 有序 | 无序 | 无序 |
键唯一性 | 唯一 | 可重复 | 唯一 | 可重复 |
插入/查找时间复杂度 | O(log n) | O(log n) | O(1)(平均),O(n)(最坏) | O(1)(平均),O(n)(最坏) |
内存占用 | 较高(树节点额外信息) | 较高 | 较低(但需预留哈希桶空间) | 较低 |
operator[] 支持 |
✅ | ❌ | ✅ | ❌ |
适用场景 | 需有序遍历或范围查询 | 需有序且允许键重复 | 高频查找且无需顺序 | 高频插入/删除且允许键重复 |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.