为什么unordered_multiset对于许多相等的键不起作用

Why unordered_multiset works bad for many equal keys

本文关键字:不起作用 于许多 unordered multiset 为什么      更新时间:2023-10-16

我有这段代码:

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

它只是在一个unordered_multiset中放了很多相等的元素。但是我发现,哈希中元素越多,运行速度就越慢?我不知道原因是什么。在我看来,在应用哈希函数并找到相等元素的桶(因为所有相等的元素都分组在一起)之后,仍然只是将它们放在桶的末尾。

那么这里有什么问题呢?

Udp:我找到了unordered_multiset::insert函数的描述

单个元素插入:平均情况:常数。最坏的情况:容器大小成线性。

所以现在的问题可以改写为:"为什么最坏的情况是线性的"

所有东西都放在同一个桶里。要把某样东西放到桶的末端,你必须找到桶的末端,桶里的东西越多,需要的时间就越长。

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

当您在所有元素中存储相同的值时,它们将最终在相同的bucket中。哈希表可能出现的最坏情况!