我想知道STL multiset,map和hash map类的Big O符号的复杂性:
答案 0 :(得分:96)
这些是使用red-black tree实现的,balanced binary search tree。它们具有以下渐近运行时间:
插入:O(log n)
查找:O(log n)
删除:O(log n)
这些是使用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)。