C++无序映射恒定时间访问

C++ Unordered Map Constant Time Access?

本文关键字:定时间 访问 映射 无序 C++      更新时间:2023-10-16

我正在研究C++无序映射容器类型。我只是在验证我从C++网站上读到的关于元素访问的内容。

它说时间复杂度通常是恒定的,但最坏的情况是线性时间。由于我的应用程序必须保证对该映射中元素的持续时间访问,所以我想验证我对该容器的理解。

每当我的应用程序访问这个无序映射中的元素时,它要查找的对象都保证存在,因此容器永远不会尝试添加丢失的元素。由于我只进行查找,这是否意味着无序映射将始终为我提供恒定时间访问线性时间情况仅适用于将发生插入的某些情况,正确吗?

编辑:保证无序映射中的元素是唯一的。它们保存内存中存在的几个唯一对象的地址。

查找取决于任何现有元素是否存在哈希冲突,在这种情况下,元素被放在同一个桶中,必须使用相等比较进行线性搜索。最糟糕的情况是,一切都在同一个桶里。

因此,可以具有线性查找时间复杂度的只读映射,但如果可以保证现有元素不发生冲突,则可以保证O(1)查找。

错误。

只要不存在哈希冲突,哈希映射对于插入和查找都具有O(1)时间。如果存在哈希冲突,则复杂度为O(m),其中m是与请求的哈希的冲突次数——如果所有哈希都冲突,则最多为n。

构造一个所有哈希冲突的情况是微不足道的,避免在这种情况下绝非微不足道,尤其是当有恶意攻击者提供密钥时。

如果您想要有保证的时间界限,请使用树映射,即O(log n)来查找和插入