1.59、map和set的区别和底层实现是什么?
主要区别
存储结构不同
- •
set
只存储键(key),即元素本身就是关键字,且元素唯一且有序。 - •
map
存储键值对(key-value),键唯一且有序,值是与键关联的数据。
元素唯一性和修改权限
- •
set
中的元素是唯一且不可修改的(迭代器指向的元素是const),因为修改元素会破坏排序规则。 - •
map
允许修改value
,但不允许修改key
(key
是const
),因为key
决定元素在红黑树中的位置,修改key
相当于删除再插入,破坏结构。
访问方式
- •
set
不支持通过下标访问,只能通过迭代器遍历或查找。 - •
map
支持通过key
下标访问(operator[]
),不存在的key
会插入默认值元素。
底层实现细节
红黑树特性
- • 红黑树是一种自平衡的二叉搜索树,节点带有红/黑色标记,保证树的高度为,从而保证操作效率。
- • 其性质包括根节点为黑色,红色节点不能连续出现,任意路径黑色节点数相同等,确保平衡。
- • 插入和删除时通过颜色调整及左旋、右旋操作维持平衡。
为什么用红黑树
- • 保证元素有序,方便范围查询、顺序遍历等操作。
- • 保证插入、删除、查找的时间复杂度均为,避免普通二叉搜索树退化成链表的风险。
与哈希容器区别
- •
unordered_map/unordered_set
底层用哈希表,查找平均为,但无序,且在哈希冲突严重时退化为链表或红黑树。 - •
map/set
提供有序数据结构,适合需要排序或范围操作的场景。
总结
特性 | set | map |
存储内容 | 仅键(key) | 键值对(key-value) |
元素唯一性 | 唯一且不可修改 | key唯一,value可修改 |
访问方式 | 迭代器遍历、查找 | 支持key下标访问 |
底层实现 | 红黑树 | 红黑树 |
典型用途 | 去重、有序集合 | 关联数组、键值映射 |
时间复杂度 | 插入/删除/查找均为 | 插入/删除/查找均为 |
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1394
文章版权归作者所有,未经允许请勿转载。
THE END