multiset,map和hash map复杂性

时间:2008-10-21 17:02:34

标签: c++ complexity-theory big-o

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

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

2 个答案:

答案 0 :(得分:96)

map,set,multimap和multiset

这些是使用red-black tree实现的,balanced binary search tree。它们具有以下渐近运行时间:

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

hash_map,hash_set,hash_multimap和hash_multiset

这些是使用hash tables实现的。它们具有以下运行时:

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

如果你使用正确的哈希函数,你几乎永远不会看到最坏的情况,但要记住这一点 - 请参阅Crosby和Wallach的Denial of Service via Algorithmic Complexity Attacks作为一个例子。

答案 1 :(得分:8)

您可以在SGI STL文档中找到此信息: http://www.sgi.com/tech/stl/

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

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

在找到之后访问它是所有结构的O(1)。比较,你是什么意思?毕竟发现后听起来像是O(1)。