【问题标题】:Why don't unordered containers provide an interface for defining minimum load factor?为什么无序容器不提供定义最小负载因子的接口?
【发布时间】:2013-08-16 14:25:52
【问题描述】:

我试图理解为什么哈希表(无序容器,如 unordered_map 或 unordered_set)不提供用于查询或设置最小负载因子的接口。

说c是unordered_set,我可以用

c.max_load_factor()

用于查询

c.max_load_factor(val)

用于设置。

为什么 C++11 不提供查询 min_load_factor 的接口?是否有实施细节,可以解释?

此外,Josuttis 的 C++ STL 提到:

最小负载因子,用于在容器中元素数量收缩不受影响时强制rehashing。

【问题讨论】:

  • 猜测是这样删除元素不必分配内存并且不会失败(也许除非析构函数抛出,在这种情况下你责怪元素类型而不是容器)。我不知道这是否是真正的原因,但可能还有另一个更强大的原因。
  • @SteveJessop:我想说它与许多其他容器一致:vectordeque 都不会自动收缩。
  • 最小负载系数是什么意思?在重新调整大小之前它会变得多小?
  • @andre:是的,我会说哈希重新哈希之前的最小大小。
  • @MatthieuM:是的,可能出于同样的原因?或者在vector 的情况下,因为还有尊重的能力。

标签: c++ c++11


【解决方案1】:

unordered_map 上的负载因子会影响哈希表中的冲突概率。例如,两个元素位于同一个桶中的概率。容器使用max_load_factor 的值作为阈值,强制增加桶数,从而导致重新哈希。

没有用户可控制的最小负载因子这样的东西,因为它应该尊重容器中已有元素的数量。

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2015-02-07
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多