C++ unordered_map的rehash()和reserve()方法有什么不同?为什么需要两种不同的方法?
发布于 2013-02-13 18:26:21
不同之处在于目的,尽管两者都在做类似的事情。
rehash采用现有的映射并重新构建新大小的存储桶,在此过程中进行重新散列,并将元素重新分发到新的buckets.reserve中,这保证了如果您插入的元素不超过保留的元素数量,就不会进行重新散列(即迭代器将保持有效)。这是两件有点不同的事情,尽管是相关的。rehash没有给您任何保证,reserve也没有表达重新散列的目的。如果您认为您的地图效率低下,请使用rehash;如果您准备进行大量插入,请使用reserve。
正如@Xeo指出的那样,考虑到地图允许的负载因子,reserve只是rehash的一个包装器。
发布于 2013-02-13 18:34:48
来自cplusplus.com
重新散列:重新散列是对散列表的重建:>容器中的所有元素都根据它们的散列值重新排列到新的一组存储桶中。这可能会改变容器中元素的顺序。
保留:将容器(bucket_count)中的存储桶数量设置为最合适的>,以至少包含n个元素。
我从这里了解到,rehash试图根据给定的n个大小更改哈希表中的存储桶数量。保留将哈希表中的存储桶数量更改为最合适的数量,以便存储至少n个(由用户给定的)元素。我希望我的声明已经讲清楚了。
https://stackoverflow.com/questions/14851249
复制相似问题