如何根据元素数量选择max_load_factor
how to choose max_load_factor based on number of elements?
我和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);
相关文章:
- <streamsize>C++ 中 numeric_limits::max() 的值
- 黑客级别的Mini-Max Sum
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 关于 std::min, std::max 中的比较运算符的混淆
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- std::max() 函数与定点实现的比较中的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- 从自定义类获取对象向量中的 max 元素
- 如何在C++中递归地找到max元素的索引?
- SFINAE 与 numeric_limits<T>::max() 在 MSVC2017 上
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- numpy.load 给出 ValueError: descr 不是有效的 dtype 描述符:
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- 在f2c.h文件中定义min()max()宏时出错
- c++curl返回413请求实体过大,但是post大小远小于max大小
- 在枚举类型上使用std::max是不是一种糟糕的做法
- 为什么Visual Studio 2019不支持用于减少Openmp的关键字"max"?
- 没有函数模板的实例"max"与参数列表参数类型匹配(int、int)
- Qt3D:"Mesh is empty, nothing to load"消息