【发布时间】:2020-11-04 17:43:08
【问题描述】:
已知哪些技术可以防止迭代器在重新散列之后/期间失效?特别是,我对具有增量重新哈希的冲突链哈希表感兴趣。
假设我们正在通过迭代器迭代哈希表,在迭代期间插入一个元素,并且该插入会导致完整或部分表重新哈希。我正在寻找允许继续迭代的哈希表变体,并确保所有元素都被访问(可能除了新插入的元素,没关系)并且没有元素被访问两次。
AFAIK C++ unordered_map 在重新散列期间使迭代器无效。此外,AFAIK Go 的地图具有增量重新散列并且不会使迭代器无效(范围循环状态),所以它可能是我正在寻找的,但我无法完全理解 source code 到目前为止。
一种可能的解决方案是有一个所有元素的双向链表,与哈希表平行,不受重新散列的影响。此解决方案需要每个元素两个额外的指针。我觉得应该存在更好的解决方案。
【问题讨论】:
标签: algorithm go data-structures hashmap hashtable