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】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)

阅读剩余
THE END