无序(或散列)映射中的迭代器
iterators in Unordered (or Hash) Maps
据我所知,hashmap比标准映射更可取,因为您可以在接近0(1)的时间内找到元素。这是通过使用散列或键作为数组查找来完成的。然后我们解决任何冲突并取出值。
这对于查找非常有效,但是如果我们进行哈希查找的数组空间是稀疏填充的,那么hashmap/unorderedmap如何有效地迭代hashmap中的所有元素而不耗尽我们的数组空间?
编辑:然而Boost, SGI和c++ 11 hashmap/无序映射有迭代器,那么它们是如何工作的?除非存在并行结构(例如LinkedHashMap
中的链表),否则不能:迭代将需要检查每个桶的内容。
迭代为O(n),其中n为映射的容量(即桶的数量)。但通常,你不应该有100000的容量来存储6个键。这意味着O(大小)应该是O(容量),这意味着迭代通常也是O(大小)。
相关文章:
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 映射迭代器与运算符不匹配
- 我可以将映射迭代器与 OpenMP 并行使用吗?
- 取消引用映射迭代器时返回对临时的引用
- 为什么映射迭代器显示基本操作数无效错误
- 复制映射迭代器对值的省略
- ->第一个/第二个到空映射迭代器开始
- 由引用集/映射迭代器传递的迭代器不可取消引用
- 在 GCC 上自动声明映射迭代器错误
- 指向同一项的两个映射迭代器是否保证相等
- 嵌套映射迭代器
- 模板标准::映射::迭代器实例化
- 映射迭代器遍历技术
- 映射迭代器与手动
- VC++11映射和多映射迭代器(重载)C2535
- 切换情况下映射迭代器的交叉初始化
- C++-映射迭代器中的if语句导致程序崩溃的原因
- 映射迭代器:一元'*'的无效类型参数(具有"int")
- 比较未引用的映射迭代器(std::pairs):C2678
- 与C++中擦除映射迭代器的行为不一致