我发现set和map都是以树形式实现的。 set是二叉搜索树,map是自平衡二叉搜索树,比如红黑树?我对实施的不同感到困惑。我可以想象的差异如下
1)set中的元素只有一个值(key),map中的元素有两个值。 2)set用于自己存储和获取元素。 map用于通过密钥存储和获取元素。
还有什么重要的?
答案 0 :(得分:4)
地图和集合具有几乎相同的行为,并且实现使用完全相同的基础技术是很常见的。
唯一重要的区别是map不使用整个value_type来比较,只是它的关键部分。
答案 1 :(得分:1)
通常你会马上知道你需要的东西:如果你对地图的“值”参数只有一个bool,你可能想要一个集合。
Set是一个离散的数学概念,根据我的经验,在编程中一次又一次地弹出。 stl set类是一种相对有效的方法来跟踪最常见的opertions插入/删除/查找的集合。
使用地图,其中对象具有与其整个属性集相比较小的唯一标识。例如,网页可以定义为URL和内容的字节流。您可以将该字节流放入集合中,但二进制搜索过程将非常慢(因为内容比URL大得多),如果网页内容发生变化,您将无法查找网页。 URL是网页的标识,因此它是地图的关键。
答案 2 :(得分:0)
地图通常以集合<的std ::对<>取代。
当您希望有序列表快速搜索项目时,使用该集合,基本上,当您想要检索给定其键的值时使用地图。
在这两种情况下,键(用于映射)或值(用于set)必须是唯一的。如果要存储多个相同的值,可以使用multimap或multiset。