1.51、unordered_map的扩容过程
当 std::unordered_map
的元素数量增长到使当前负载因子(load factor,即元素数除以桶数)超过其最大负载因子(max_load_factor()
,默认通常是1.0,但可调整)时,容器会触发**扩容(rehash)**过程。
扩容的核心步骤包括:
- • 重新分配桶的数量:通常,桶的数量会增加到至少当前元素数除以最大负载因子所需的桶数,常见实现中会以原桶数的2倍或更大进行扩容,但具体增长策略由实现决定,也可通过设置
max_load_factor
调整触发阈值。 - • 重新哈希所有元素:所有现有元素根据新的桶数量和哈希函数重新分布到新的桶中,保证哈希表的性能和查找效率。
扩容过程的意义在于控制负载因子,减少哈希冲突,保证unordered_map
的查找、插入等操作的平均时间复杂度接近O(1)。开发者可以通过max_load_factor()
和rehash()
接口手动调整扩容行为,优化性能和内存使用。
总结来说,unordered_map
的扩容是基于负载因子阈值触发的自动或手动rehash
,核心是增加桶数并重新哈希元素,以维持高效的哈希表性能。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1361
文章版权归作者所有,未经允许请勿转载。
THE END