为什么unordered_multiset对许多相等的密钥都有效

时间:2015-10-05 06:57:15

标签: c++ stl unordered-multiset

我有这段代码:

unordered_multiset<int> t;
for (int i = 0; i < 1000000; i++) {
    if (i % 10000 == 0)
        cout << i << endl;

    t.insert(10);
}

所以它只是在unordered_multiset中放了很多相等的元素。但我发现哈希中的元素越多越慢,这有效吗?我无法理解原因。在我看来,在应用哈希函数并找到相等元素的桶之后(因为所有相等的元素被组合在一起),stl只是将它们放在桶的末尾。

那么这里有什么问题?

UDP: 我找到了unordered_multiset :: insert function

的描述
  

单个元素插入:   平均情况:不变。   最坏情况:容器尺寸呈线性。

所以现在的问题可以改为:&#34;为什么最坏的情况是线性的&#34;

2 个答案:

答案 0 :(得分:1)

一切都在同一个桶里。要在存储桶的末尾添加一些东西,您必须找到存储桶的末尾,并且存储桶中的内容越多,所需的时间就越长。

答案 1 :(得分:0)

容器尝试通过重新组织存储来平衡自身,以使平均存储桶大小低于load_factor。它通过添加更多桶来实现这一点,希望数据更均匀地分布。

当您在所有元素中存储相同的值时,它们最终会在同一个存储桶中。最糟糕的哈希表条件!