我有这段代码:
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;
答案 0 :(得分:1)
一切都在同一个桶里。要在存储桶的末尾添加一些东西,您必须找到存储桶的末尾,并且存储桶中的内容越多,所需的时间就越长。
答案 1 :(得分:0)
容器尝试通过重新组织存储来平衡自身,以使平均存储桶大小低于load_factor。它通过添加更多桶来实现这一点,希望数据更均匀地分布。
当您在所有元素中存储相同的值时,它们最终会在同一个存储桶中。最糟糕的哈希表条件!