我想了解在Big O符号表示法中,STL multiset、map和hash map类的复杂度情况,包括:
- 插入条目
- 访问条目
- 检索条目
- 比较条目
我想了解在Big O符号表示法中,STL multiset、map和hash map类的复杂度情况,包括:
这些使用红黑树实现,是一种平衡二叉搜索树。它们具有以下渐进运行时间:
插入: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容器? - myWallJSONhash_*
类模板是Silicon Graphics STL的一部分。在C++11修订版中,它们以unordered_*
名称(如unordered_map、unordered_set等)的形式被纳入其中。此外,它们也被包含在libstdc++、Visual C++和Boost C++库中。 - milpitaset
、multiset
、map
、multimap
,它们的时间复杂度为O(logn)
,因为它们使用平衡二叉树来组织数据。unordered_set
和unordered_map
,则使用哈希表来组织数据。因此,这些操作的时间复杂度为O(1)
。这是在不需要按排序顺序处理数据时执行任何操作的完美方式。