我与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
答案 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);