C++的rehash()
和方法有什么区别?为什么需要两种不同的方法?reserve()
unordered_map
问问题
4182 次
2 回答
13
区别在于目的,尽管两者都在做类似的事情。
rehash
获取现有地图并重建新大小的桶,在此过程中重新散列并将元素重新分配到新桶中。reserve
向您保证,如果您不插入超过保留数量的元素,则不会进行重新散列(即您的迭代器将保持有效)。
这是两个有些不同的东西,尽管是相关的。rehash
不给你任何保证,reserve
也不表达重新散列的目的。如果rehash
您认为您的地图效率低下,并且reserve
您正在准备大量插入,请使用此选项。
正如@Xeo 指出的那样,考虑到地图的允许负载因子,reserve
它只是一个包装器。rehash
于 2013-02-13T10:26:21.033 回答
1
rehash:rehash 是对哈希表的重构:> 容器中的所有元素都根据它们的哈希值重新排列到新的一组桶中。这 > 可能会改变容器内元素的顺序。
保留:将容器中的桶数(bucket_count)设置为最合适的>以包含至少n个元素。
我从这里了解到,rehash 尝试根据给定的 n 大小更改哈希表中的桶数。保留将哈希表中的桶数更改为最合适的数量,以便存储至少 n 个(由用户提供)元素。我希望我的陈述清楚。
于 2013-02-13T10:34:48.163 回答