如何根据元素数量选择max_load_factor

how to choose max_load_factor based on number of elements?

本文关键字:max load factor 选择 何根 元素      更新时间:2023-10-16

我和unordered_set一起工作。这里写着它有一个reserve函数根据要包含N元素的数量设置存储桶。然而,mpic++ Ubuntu 上的编译器抱怨没有函数保留: class std::tr1::unordered_set<pair_int>’ has no member named ‘reserve’

我需要优化我的集合以容纳N元素,似乎max_load_factor可用,我如何根据N来一个?或者我可以以某种方式优化它?

提前致谢

P/S/看到了一些关于 Java 的讨论,但没有看到 C++ STL lib 的讨论

加载系数与您插入的项目数无关。它基本上是实际使用的可用空间的百分比。例如,如果您当前有空间分配了 100 个元素,则最大加载系数可以表示在您插入 80 个项目时开始调整表的大小(这对应于 80% 的最大负载系数)。

因此,设置最大加载系数在很大程度上与要存储的元素数量无关。相反,它(主要)表明您愿意使用多少额外空间来提高搜索速度。在其他条件相同的情况下,接近满的表将有更多的冲突,这将减慢搜索速度。

如果要优化无序集合以容纳 N 个元素,则需要使用 rehash 函数。 这将接受为集合设置最小存储桶的参数。 这将防止在将元素插入集合时发生重新散列。

例如,如果您所需的负载系数为 75%则铲斗大小应N / .75

//  This creates an unordered set optimized for `80` elements with a load factor of `75%`
std::unordered_set<std::string> myset;
myset.rehash(120);