我知道C ++ STL中的unordered_map是作为散列表实现的,该散列表由对应于散列值的桶组成。插入,删除和元素搜索的时间保证摊销不变。但是我不太明白迭代器如何在这个数据结构上工作。当我增加迭代器时,它如何知道下一个位置在哪里?当我使用迭代器迭代unordered_map时,时间复杂度会是多少?用于查找迭代器常量的下一个位置的时间是多少?我在书中找到了有关unordered_map内部结构的一些信息 C ++标准库:教程和参考,但我无法找到问题的答案。希望有人可以帮忙!
感谢。
答案 0 :(得分:7)
哈希表是使用包含链接列表的存储桶实现的。所以迭代很简单:
(通过查找第一个包含节点的存储桶来查找第一个节点。)
直观地说,由于使用上述算法迭代整个哈希表是O(n),所以看起来每个" next"操作是摊销的常数。