如何根据元素的数量选择max_load_factor?

时间:2012-06-12 09:34:33

标签: c++ stl set

我与unordered_set合作。 Here它写有reserve函数 根据要包含的元素数N设置存储桶。 但是,Ubuntu上的mpic++编译器抱怨没有函数保留: class std::tr1::unordered_set<pair_int>’ has no member named ‘reserve’

我需要优化我的设置来保存N元素, 似乎max_load_factor可用,我如何根据N提供? 或者我可以以其他方式优化它吗?

提前致谢

p / s /看了一些关于java的讨论,但没有讨论c ++ stl lib

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果要优化无序集以容纳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);