多集,映射和哈希映射的复杂性


72

我想知道在以下情况下STL多集,映射和哈希映射类的Big O表示法的复杂性:

  • 插入条目
  • 访问条目
  • 检索条目
  • 比较条目

2
这实际上是我的帖子,我无法理解为什么我显得不活跃,因此无法更改它……
哈里

Answers:


107

映射,设置,多图和多集

这些是使用红黑树(一种平衡的二进制搜索树)实现的。它们具有以下渐近运行时间:

插入:O(log n)
查找:O(log n)
删除:O(log n)

hash_map,hash_set,hash_multimap和hash_multiset

这些是使用哈希表实现的。它们具有以下运行时:

插入:预期O(1),O(n)最坏情况
查找:预期O(1),O(n)最坏情况
删除:预期O(1),O(n)最坏情况

如果使用适当的哈希函数,您几乎永远不会看到最坏的情况,但这是要牢记的-有关示例,请参见Crosby和Wallach的“通过算法复杂性攻击进行拒绝服务”


4
您所说的所有内容都hash_*涉及C ++ 11无序容器和Boost.Unordered容器吗?
myWallJSON 2011年

3
hash_*类模板的一部分,Silicon Graphics的STL。它们以unordered_*名称(unordered_map,unordered_set等)并入C ++ 11修订版。此外,它们已包含在libstdc ++,Visual C ++和Boost C ++库中。
milpita

1
@CEOatApartico:修复了无效链接
Adam Rosenfield

我不理解“预期的O和最坏情况的O”。按照定义,Big-O是“最坏的情况”。
Paulius Liekis

@PauliusLiekis你不知道你在说什么。按照定义,Big-O是“上限”,与最坏情况avg没有关系。情况,最好的情况。
ypnos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.