unordered_map哈希冲突,哈希扩容,扩容时访问与插入?

链表法:

扩容:

其实与Redis类似,链表法解决哈希冲突,扩容就是当负载因子>1时,新开一个buckets,大小为>num_element的下一个质数,并遍历原来的buckets将原来的元素rehash迁移到新的buckets中。迁移完成后把tmp表换成buckets表即可。

如果扩容期间插入或查询,和redis一致,插入直接插入tmp表,查询先查原来的表,再查tmp表。

建议看看《redis设计与实现》的dict部分,说的更详细,还有渐进式rehash的优化。

posted @ 2022-08-10 12:58  misaka-mikoto  阅读(605)  评论(0编辑  收藏  举报