std :: set和std :: map有什么区别

瓦洛克

我是C ++编程的新手,想知道是否有人可以为我澄清一些问题。

http://www.cplusplus.com/reference/set/set/

http://www.cplusplus.com/reference/map/map/

我一直在阅读有关如何实现STL二进制搜索树的信息,并且我不断注意到std :: set和std :: map被不断提及作为完成此类任务的方法。两者之间到底有什么区别?在我看来,两者似乎几乎完全相同,我不确定在某些特定任务上我是否没有注意到使某一项比另一项更好。使用std :: set而不是std :: map来实现STL二进制搜索树有什么好处,该树从数组或向量中获取值(例如,速度)?

如果有人可以帮助我理解这个概念,我将不胜感激!

阿西姆·戈亚尔(Aseem Goyal)

这两个std::setstd::mapassociative containers不同之处在于,std::sets仅包含键,
其中包含std::map一个关联的值,即if A -> B,然后map [A​​] = B,其工作方式类似,hashingO(1)不是O(log N)

您可以进一步查看unordered_map,它可以O(1)及时提供操作

std::set使数据保持排序格式。
两者的实现都是通过平衡树(例如AVL或Red-Black树)来完成的,从而增加了O(logN)时间复杂度。

但是要注意的重要一点是,两者都可以存储唯一值为了克服这一点,您还必须看到multimapmultiset

希望这可以帮助 !

更新:对于Red-Black树重新平衡旋转是一项O(1)操作,而对于AVL来说,这是一项O(log n)操作,这使得Red-Black树在重新平衡阶段的这方面效率更高,这是其可能的原因之一更常用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

std :: invoke和std :: apply之间有什么区别?

std::ranges::swap() 和 std::swap() 有什么区别?

std::__gcd 和 std::gcd 有什么区别?

std :: atoi()和std :: stoi有什么区别?

std :: move和std :: forward之间有什么区别

std :: invoke和std :: function之间有什么区别?

std :: cout和std :: wcout有什么区别?

:: std :: string和std :: string之间有什么区别?

std::greater{} 和 std::greater<int>() 有什么区别?

std :: tie和带有std :: ref参数的std :: make_tuple有什么区别?

libfmt和std :: format有什么区别?

std :: variant和boost :: variant之间有什么区别?

'\ n'和std :: endl有什么区别

std :: deque和boost :: deque有什么区别?

std :: endl和'\ n'有什么区别

在C ++中exit和std :: exit有什么区别?

auto和std :: any之间有什么区别?

( this ) 和 ( std::ref(*this) ) 之间有什么区别

std :: tie和std :: forward_as_tuple有什么区别

std :: lower_bound和std :: upper_bound有什么区别?

将函数直接传递给std :: async和使用std :: bind有什么区别?

-std = c ++ 0x和-std = c ++ 11有什么区别

std :: partial_sum和std :: inclusive_scan有什么区别?

std :: filesystem :: copy()和std :: filesystem :: copy_file()有什么区别?

C ++ std :: lock和std :: unique_lock之间有什么区别?

std :: default_initializable和std :: is_default_constructible之间有什么区别?

const std :: vector <T>和std :: vector <T> const有什么区别?

std :: ranges :: begin和std :: begin之间有什么区别?

std :: shared_ptr和std :: experimental :: atomic_shared_ptr有什么区别?