关于c ++:unordered_map最坏的情况是什么?

What is the worst case scenario for an unordered_map?

我发现许多关于mapunordered_map的复杂性的帖子。 据说unordered_map具有最坏情况下的O(N)复杂度。 出于我的目的,我将输入像1 2 5 6 9 11 12..这样的排序值。 我需要插入或查找和删除一个值。 我将不得不非常频繁地执行插入/删除操作。 我想到了在所有情况下都使用log(n)复杂度的set。 然后我偶然发现了具有最佳O(1)复杂度的unordered_map。 但是我需要了解我的情景,我会面对unordered_map的最坏情况吗? 会发生什么情况?

编辑:就我而言,所有值都是唯一的。


unordered_map最坏的情况通常发生在哈希函数为映射中的每个插入产生冲突时。

我说"通常"是因为该标准仅指定了最坏情况下的复杂性,而不指定其发生的时间或方式,因此从理论上讲,您的问题的答案是它是由实现定义的。

由于所有值都是唯一的,并且显然是整数(表示很好的哈希,可能是最佳_,这又取决于实现),因此您不会遇到这种最坏情况。 insert / find / delete将为O(1),因此看起来是一个合理的选择。


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