迭代c++ unordered_map的时间复杂度
Time complexity of iterating through a C++ unordered_map
我知道c++ STL中的unordered_map是作为哈希表实现的,由与哈希值对应的桶组成。插入、删除和元素搜索的时间保证是平摊常数。然而,我不太明白迭代器是如何在这种数据结构上工作的。当我增加迭代器时,它怎么知道下一个位置在哪里?使用迭代器遍历unordered_map时,时间复杂度是多少?寻找迭代器下一个位置的时间是常数吗?我在 c++标准库:教程和参考一书中找到了一些关于unordered_map的内部结构的信息,但我找不到我问题的答案。希望有人能帮忙!
谢谢。
哈希表是使用包含链表的桶实现的。所以迭代很容易:
- 查看当前节点是否有下一个指针。
- 如果当前节点没有下一个指针,则转到下一个有节点的桶。 如果没有这样的节点,那么迭代就完成了。
(通过查找第一个包含节点的桶来查找第一个节点)
直观地说,由于使用上述算法遍历整个哈希表是O(n),因此看起来每个"下一步"操作都是摊销常数时间。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何计算函数的时间复杂度?
- 求解包含"variables"的 T(n) 时间复杂度
- 查找数字是否为 2 的幂的时间复杂度
- C++ - 最坏情况和平均情况插入时间复杂度在 std::unordered_map <int,int>?
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- 关于记忆后这种递归关系的时间复杂度
- std::map的时间复杂度是多少
- 一个清晰的函数的时间复杂度是多少,根据大 O,是 std::map
- 下面使用Map和Vector实现递归级阶遍历的时间复杂度是多少