C++ unordered_map的rehash()和reserve()方法有什么区别?

sta*_*tti 6 c++ unordered-map std data-structures c++11

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

Ker*_* SB 11

差异在于目的,尽管两者都在做类似的事情.

  • rehash获取现有地图并重建大小的存储桶,在此过程中重新进行重新分配并将元素重新分配到新存储桶中.

  • reserve 保证如果你没有插入超过保留数量的元素,就不会有重新散列(即你的迭代器将保持有效).

这些是两个有些不同的东西,尽管是相关的.rehash没有给你任何保证,reserve也没有表达重新加强的目的.使用rehash,如果你认为你的地图是低效的,而且reserve如果你准备了很多插入的.

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

  • `reserve`是用`rehash(ceil(n/max_load_factor()))`指定的 (5认同)