我想知道在以下情况下STL多集,映射和哈希映射类的Big O表示法的复杂性:
- 插入条目
- 访问条目
- 检索条目
- 比较条目
Answers:
这些是使用红黑树(一种平衡的二进制搜索树)实现的。它们具有以下渐近运行时间:
插入:O(log n)
查找:O(log n)
删除:O(log n)
这些是使用哈希表实现的。它们具有以下运行时:
插入:预期O(1),O(n)最坏情况
查找:预期O(1),O(n)最坏情况
删除:预期O(1),O(n)最坏情况
如果使用适当的哈希函数,您几乎永远不会看到最坏的情况,但这是要牢记的-有关示例,请参见Crosby和Wallach的“通过算法复杂性攻击进行拒绝服务”。
hash_*
涉及C ++ 11无序容器和Boost.Unordered容器吗?
hash_*
类模板的一部分,Silicon Graphics的STL。它们以unordered_*
名称(unordered_map,unordered_set等)并入C ++ 11修订版。此外,它们已包含在libstdc ++,Visual C ++和Boost C ++库中。