微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

迭代 unordered_map 的复杂度是多少

如何解决迭代 unordered_map 的复杂度是多少

遍历使用链式散列实现的 unordered_map 的复杂度是多少?具体来说,这是否涉及遍历所有桶,在这种情况下,复杂度是 O(Buckets + NElements) 与理想的,例如O(NElements)

解决方法

迭代 unordered_map 的复杂度是多少?

O(N) 其中 N 是存储的元素数。标准的most relevant part

迭代器的所有类别只需要那些可以在恒定时间(摊销)内为给定类别实现的函数。因此,迭代器的需求表没有复杂性列。

您可以在例如this answer

..使用散列和链式实现?

所有无序映射都使用带有链接的散列 - 参见 here

具体来说,这是否涉及遍历所有桶,在这种情况下,复杂度是 O(Buckets + NElements) 与理想情况,例如O(N 个元素)

它实现了您所说的“理想”。在 GCC 的情况下,bucket 将迭代器保存到一个单链表中,并且在迭代容器时遍历通常较短的列表。通常是因为即使不更改默认的 max_load_factor() 1.0,桶的数量也可能与元素的数量完全相等 - 超过这个数量的元素将触发调整大小。但是,当几乎所有元素都被删除时,迭代的 big-O 效率变得更加重要,因为桶的数量不会自动向下调整(即减少)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。