unordered_map的最坏情况是什么?

时间:2014-06-11 05:01:47

标签: c++ map time-complexity unordered-map space-complexity

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

根据散列算法的实现,使用unordered_map时,有序的数据集最终可能会导致大量冲突。由于您的数据是有序的,因此使用树集可能更有利。(假设您不希望能够添加重复数据。)