【问题标题】:set map implementation in C++在 C++ 中设置地图实现
【发布时间】:2010-02-11 22:10:45
【问题描述】:

我发现 set 和 map 都实现为树。 set是二叉搜索树,map是自平衡二叉搜索树,比如红黑树?我对实施的差异感到困惑。我可以想象的差异如下

1) set 中的元素只有一个值(key),map 中的元素有两个值。 2) set 用于自己存储和获取元素。 map 用于通过 key 存储和获取元素。

还有什么重要的?

【问题讨论】:

    标签: c++ dictionary tree set


    【解决方案1】:

    地图和集合具有几乎相同的行为,并且实现使用完全相同的底层技术是很常见的。

    唯一重要的区别是 map 不使用整个 value_type 进行比较,只使用它的关键部分。

    【讨论】:

      【解决方案2】:

      通常你会马上知道你需要哪个:如果你只有一个布尔值作为映射的“值”参数,你可能想要一个集合来代替。

      集合是一个离散数学概念,根据我的经验,它在编程中一次又一次地出现。 stl set 类是一种相对有效的方法来跟踪最常见的操作是插入/删除/查找的集合。

      映射用于对象具有与其整个属性集相比较小的唯一标识的情况。例如,可以将网页定义为 URL 和内容的字节流。您可以将该字节流放在一个集合中,但是二进制搜索过程会非常慢(因为内容比 URL 大得多)并且如果其内容发生更改,您将无法查找网页。 URL是网页的标识,所以是地图的key。

      【讨论】:

      • 除非真/假/不存在都是不同的状态。 :) 当值的一部分可以改变(特别是 std::map::mapped_type )而不改变值的标识时,映射适用,而不仅仅是一个“有效集合”。
      【解决方案3】:

      映射通常实现为一个集合<:pair> >。

      当您希望有序列表快速搜索项目时使用集合,基本上,当您想要检索给定键的值时使用映射。

      在这两种情况下,键(用于映射)或值(用于设置)必须是唯一的。如果要存储多个相同的值,可以使用 multimap 或 multiset。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多