c++ - 迭代 unordered_map 的复杂性是什么
问题描述
遍历使用散列和链接实现的 unordered_map 的复杂性是多少?具体来说,这是否涉及遍历所有存储桶,在这种情况下,复杂性是O(Buckets + NElements)
理想的,例如O(NElements)
解决方案
迭代的复杂性是
unordered_map
多少?
O(N) 其中 N 是存储的元素数。标准中最相关的部分:
迭代器的所有类别只需要在恒定时间内(摊销)对给定类别可实现的那些函数。因此,迭代器的需求表没有复杂性列。
你可以看到更多关于这个 - 和讨论 - 例如这个答案
..使用带有链接的散列实现?
所有无序映射都使用带有链接的散列 - 请参见此处。
具体来说,这是否涉及遍历所有桶,在这种情况下,复杂度是 O(Buckets + NElements) 与理想的,例如 O(NElements)
它做你所说的“理想”。在 GCC 的情况下,桶将迭代器保存到一个单链表中,并且在迭代容器时通常会遍历更短的列表。通常是因为即使不更改默认值max_load_factor()
1.0,桶的数量也可能完全等于元素的数量 - 任何比这更多的元素都会触发调整大小。但是,当几乎所有元素都被删除时,迭代的大 O 效率变得更加重要,因为桶的数量不会自动向下调整(即减少)。
推荐阅读
- python - 用于查看/ JSON Schema 文件的 Python 模块
- postgresql - 如何在 whereIn 语句中使用多个列?
- laravel - 在 laravel 的 vue 组件中引用图像的正确方法
- c# - “TextMeshPro/Distance Field”中的着色器错误:无法打开源文件:第 126 行的“TMPro_Properties.cginc”(在 d3d11 上)
- python - 在 python/pandas 中创建关于客户首次购买日期的重复购买矩阵
- excel - 在 Windows excel 等 Unix 服务器中创建交互式数据透视表
- php - 选择选项中的多级类别
- ruby-on-rails - Ruby 没有创建新项目
- amazon-web-services - 在 Cloudformation 模板中,如何在 IoT 规则中引用动态生成的 Lambda 函数 ARN?
- python - python flask:使用全局应用对象共享数据