Val*_*rok 10 c++ map set binary-search-tree
我对c ++编程比较陌生,想知道是否有人可以帮我澄清一些问题.
http://www.cplusplus.com/reference/set/set/
http://www.cplusplus.com/reference/map/map/
我一直在阅读如何实现STL二进制搜索树,并且我一直注意到std :: set和std :: map经常被提到作为完成这样一个任务的方法.然而,这两者究竟有什么区别?对我来说,两者看起来几乎完全相同,我不确定是否有一些我没有注意到的东西,使一个人比另一个更好的特定任务.使用std :: set over std :: map来实现从数组或向量中获取值的STL二叉搜索树(例如速度)是否有任何优势?
如果有人能帮我理解这个概念,我会非常感激!
这两个std::set和std::map的associative containers.区别在于std::sets只包含密钥,
而在std::map那里有一个关联的值,即if A -> B,然后map [A] = B,这样就可以了,hashing但O(1)不是O(log N).
您可以进一步查看unordered_map,它可以O(1)及时提供操作.
std::set将数据保存为排序格式.
两者的实现都是通过平衡树(如AVL或红黑树)完成的,这给出了O(logN)时间复杂性.
但值得注意的是,两者都可以存储唯一值.要克服这个问题,您还必须看到multimap和multiset.
希望这可以帮助 !
更新:在Red-Black树重新平衡旋转的情况下,旋转是一个O(1)操作,而AVL这是一个O(log n)操作,使Red-Black树在重新平衡阶段的这个方面更有效,并且可能的原因之一更常用.
| 归档时间: |
|
| 查看次数: |
16587 次 |
| 最近记录: |