unordered_map的最坏情况是什么?

Tah*_*lil 5 c++ unordered-map map time-complexity space-complexity

我发现有关的复杂很多职位mapunordered_map.据说unordered_map最坏的情况是复杂的O(N).为了我的目的,我将输入作为排序值,如1 2 5 6 9 11 12...我需要插入或查找并删除一个值.我将不得不经常插入/删除.我想到了set在所有情况下都使用log(n)的复杂性.然后我偶然发现了具有最佳O(1)复杂度的unordered_map.但我需要了解在我的场景中我将面对unordered_map的最坏情况吗?会是什么情景?

编辑:在我的情况下,所有的值都是唯一的.

qua*_*dev 5

unordered_map 最糟糕的情况通常发生在哈希函数为地图中的每个插入产生冲突时.

我说"通常"是因为标准只规定了最坏情况的复杂性,而不是它何时或如何发生,所以理论上你的问题的答案是它是实现定义的.

由于您的所有值都是唯一的,并且显然是整数(表示非常好的散列,可能是最佳的_这也是依赖于实现的),因此您不会遇到这种最糟糕的情况.insert/find/delete将是O(1),所以它看起来是一个合理的选择.

  • “当散列函数产生冲突时” - 这听起来像是孤立的散列函数......迂腐地说,这是当散列函数*映射到桶*上时(例如,可能是通过“%bucket_count()”,尽管如此)我不认为这是强制的)有冲突。例如,如果哈希函数生成的不同值是“bucket_count()”的倍数,则它们可能会发生冲突。 (2认同)