10

C++的rehash()和方法有什么区别?为什么需要两种不同的方法?reserve()unordered_map

4

2 回答 2

13

区别在于目的,尽管两者都在做类似的事情。

  • rehash获取现有地图并重建大小的桶,在此过程中重新散列并将元素重新分配到新桶中。

  • reserve向您保证,如果您不插入超过保留数量的元素,则不会进行重新散列(即您的迭代器将保持有效)。

这是两个有些不同的东西,尽管是相关的。rehash不给你任何保证,reserve也不表达重新散列的目的。如果rehash您认为您的地图效率低下,并且reserve您正在准备大量插入,请使用此选项。

正如@Xeo 指出的那样,考虑到地图的允许负载因子,reserve它只是一个包装器。rehash

于 2013-02-13T10:26:21.033 回答
1

来自cplusplus.com

rehash:rehash 是对哈希表的重构:> 容器中的所有元素都根据它们的哈希值重新排列到新的一组桶中。这 > 可能会改变容器内元素的顺序。

保留:将容器中的桶数(bucket_count)设置为最合适的>以包含至少n个元素。

我从这里了解到,rehash 尝试根据给定的 n 大小更改哈希表中的桶数。保留将哈希表中的桶数更改为最合适的数量,以便存储至少 n 个(由用户提供)元素。我希望我的陈述清楚。

于 2013-02-13T10:34:48.163 回答