多重集合,地图和哈希映射的复杂性

我想知道在STL multiset,map和hash map类的Big O符号中的复杂性:

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

地图,集合,multimap和multiset

这些实现使用红黑树 ,一种平衡二叉search树 。 他们有以下渐近运行时间:

插入: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)最坏的情况

如果使用正确的散列函数,则几乎不会看到最坏的情况,但请记住这一点 – 以本文为例。

cppreference.com是我去我的c + +参考问题。 他们做了一个很好的工作,概述了大部分上面提到的function的大O符号。

您可以在SGI STL文档中find这些信息: http : //www.sgi.com/tech/stl/

基本上,multiset和maps都是二叉树,因此插入/查找N个条目中的1个需要O(logN)。 请参见Sorted Assoc。 容器中的文档。

显然,Hashmap的最大优点是O(1)用于插入和查找条目。

find后访问它是所有结构的O(1)。 比较,你是什么意思? 听起来像O(1),毕竟我find了。