关于std::map与std::unordered_map插入逻辑的理解是否准确?
结论并非100%准确,细节上有两处需要修正
关于std::unordered_map的插入
std::unordered_map插入时确实依赖哈希函数计算键的哈希值,但不是仅靠哈希函数直接确定存储位置。因为不同的键可能生成相同的哈希值(哈希冲突),此时还会结合容器的冲突解决策略(比如链地址法,把哈希值相同的元素放在同一个桶的链表/红黑树里)来最终确定元素的存储位置。不过核心逻辑确实是基于哈希的,这部分原结论大方向没错,但细节不够严谨。
关于std::map的插入
原结论里说“与普通二叉搜索树一致”是不准确的:
std::map属于C++标准中的有序关联容器,标准要求其底层实现是平衡的二叉搜索树(最常见的实现是红黑树),而非普通的二叉搜索树。普通二叉搜索树在插入有序数据时会退化成链表,导致时间复杂度恶化,而红黑树通过自平衡机制(变色、旋转)避免了这个问题。- 插入时的位置确定逻辑,确实是通过比较键的大小(默认用
std::less,也可自定义比较器)来遍历树:大于当前节点键则向右,小于则向左,但这个过程是在平衡二叉树的框架下进行的,和普通二叉搜索树的无平衡机制结构有本质区别。
内容的提问来源于stack exchange,提问作者user17597436
相关产品推荐
相关产品推荐

