迭代C ++ unordered_map的时间复杂度

时间:2014-08-08 02:29:22

标签: c++ stl unordered-map

我知道C ++ STL中的unordered_map是作为散列表实现的,该散列表由对应于散列值的桶组成。插入,删除和元素搜索的时间保证摊销不变。但是我不太明白迭代器如何在这个数据结构上工作。当我增加迭代器时,它如何知道下一个位置在哪里?当我使用迭代器迭代unordered_map时,时间复杂度会是多少?用于查找迭代器常量的下一个位置的时间是多少?我在书中找到了有关unordered_map内部结构的一些信息 C ++标准库:教程和参考,但我无法找到问题的答案。希望有人可以帮忙!

感谢。

1 个答案:

答案 0 :(得分:7)

哈希表是使用包含链接列表的存储桶实现的。所以迭代很简单:

  1. 查看当前节点是否有下一个指针。如果是这样,请转到那。
  2. 如果当前节点没有下一个指针,请转到具有节点的下一个存储桶。
  3. 如果没有这样的节点,那么你就完成了迭代。
  4. (通过查找第一个包含节点的存储桶来查找第一个节点。)

    直观地说,由于使用上述算法迭代整个哈希表是O(n),所以看起来每个" next"操作是摊销的常数。