【发布时间】:2010-02-11 22:10:45
【问题描述】:
我发现 set 和 map 都实现为树。 set是二叉搜索树,map是自平衡二叉搜索树,比如红黑树?我对实施的差异感到困惑。我可以想象的差异如下
1) set 中的元素只有一个值(key),map 中的元素有两个值。 2) set 用于自己存储和获取元素。 map 用于通过 key 存储和获取元素。
还有什么重要的?
【问题讨论】:
标签: c++ dictionary tree set
我发现 set 和 map 都实现为树。 set是二叉搜索树,map是自平衡二叉搜索树,比如红黑树?我对实施的差异感到困惑。我可以想象的差异如下
1) set 中的元素只有一个值(key),map 中的元素有两个值。 2) set 用于自己存储和获取元素。 map 用于通过 key 存储和获取元素。
还有什么重要的?
【问题讨论】:
标签: c++ dictionary tree set
地图和集合具有几乎相同的行为,并且实现使用完全相同的底层技术是很常见的。
唯一重要的区别是 map 不使用整个 value_type 进行比较,只使用它的关键部分。
【讨论】:
通常你会马上知道你需要哪个:如果你只有一个布尔值作为映射的“值”参数,你可能想要一个集合来代替。
集合是一个离散数学概念,根据我的经验,它在编程中一次又一次地出现。 stl set 类是一种相对有效的方法来跟踪最常见的操作是插入/删除/查找的集合。
映射用于对象具有与其整个属性集相比较小的唯一标识的情况。例如,可以将网页定义为 URL 和内容的字节流。您可以将该字节流放在一个集合中,但是二进制搜索过程会非常慢(因为内容比 URL 大得多)并且如果其内容发生更改,您将无法查找网页。 URL是网页的标识,所以是地图的key。
【讨论】:
映射通常实现为一个集合<:pair> >。
当您希望有序列表快速搜索项目时使用集合,基本上,当您想要检索给定键的值时使用映射。
在这两种情况下,键(用于映射)或值(用于设置)必须是唯一的。如果要存储多个相同的值,可以使用 multimap 或 multiset。
【讨论】: