繁体   English   中英

C ++无序映射常量时间访问?

[英]C++ Unordered Map Constant Time Access?

我正在研究C ++ unordered_map容器类型。 我只是验证我从C ++网站上读取的有关operator []的元素访问的内容。

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

每当我的应用程序访问此unordered_map中的元素时,它所寻找的对象都保证存在,因此容器将永远不会尝试添加缺少的元素。 由于我只是在查看 ,这是否意味着unordered_map总是会给我一些时间访问 线性时间情况仅适用于发生插入的某些情况,这是正确的吗?

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

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

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

错误。

只要没有哈希冲突,哈希映射就会有插入和查找的O(1)时间。 如果存在哈希冲突,则复杂度为O(m) ,其中m是与请求的哈希冲突的数量 - 如果所有哈希冲突,则最多为n。

构建一个所有哈希碰撞的案例是微不足道的, 避免这种情况远非琐碎,特别是如果有敌对攻击者给出钥匙。

如果需要保证时间范围,请使用树形图,即O(log n)进行查找和插入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM