【发布时间】:2016-02-28 18:31:13
【问题描述】:
遍历 unordered_set 是否需要查看哈希表的每个桶?如果是这样,那不是非常低效吗?如果我想频繁地迭代一个集合,但仍然需要在 O(1) 时间内删除,那么 unordered_set 仍然是最好的数据结构吗?
【问题讨论】:
-
对于所有标准 c++ 容器,迭代容器的每个元素都是
O(n)。您是否改为测试成员资格,这在集合上更快? -
*If so, wouldn't that be very inefficient?*为什么会“非常低效”?哈希表存储在连续的内存中,因此检查存储桶并不是特别繁重,性能方面。这显然不如检查vector快,但也不像通过set运行的缓存未命中。 -
据我了解,桶的数量应该大于预期的元素数量,所以我认为遍历所有桶然后访问每个桶的内容需要更多时间。跨度>