“multiset”& “multimap” - 有什么意义?

时间:2010-05-18 14:24:29

标签: c++ stl containers multimap multiset

正如问题所述...我不明白multisets / multimaps

那么,目的是什么?

7 个答案:

答案 0 :(得分:30)

一些用例:

<强>多重映射

  • 以邮政编码为核心,所有拥有该邮政编码的人
  • 以帐户ID作为密钥,该人/帐户的所有未结订单
  • 字典,每个关键字有各种解释

<强>多重集

本质上是一个带有键和整数的映射。

  • 商店的库存,所有产品都有自己的钥匙和金额 仍然可用的是值
  • 每次销售产品时,商店的累计销售数据 产品ID被添加到multiset,从而增加销售量

答案 1 :(得分:2)

如果您遇到的情况是大多数情况下密钥都是唯一的,但有时它们不是唯一的情况,那么多图会很有用。

例如,如果您要创建一个使用哈希作为键的缓存类。大多数情况下,两个不同的对象不会具有相同的哈希值,因此键将是唯一的。但是你可能会得到不同对象的哈希冲突,所以你需要一个多图来覆盖这种情况。

另一个例子是任何类型的非唯一索引(如数据库中)。

至于多重集 - 我认为那些不太有用。我唯一能想到的就是将它用作一种自动排序的列表。

答案 2 :(得分:2)

多集或多图仅适用于可能存在多个特定项的情况。例如,假设您想为图书创建索引。你会扫描文本,扔出所有真正常见的无意义的词(“a”,“an”,“the”等),然后列出所有其余的,以及书中的每个地方发生。

相当多的单词会出现在多个页面上,在这种情况下,您将有多个条目从一个单词映射到不同的页面。处理这种情况的一种方法是从单词到页码的多重映射。

答案 3 :(得分:1)

http://www.cplusplus.com/reference/stl/multimap/

  

地图是一种联想   存储元素的容器   通过组合键值和   映射值,非常类似于map   容器,但允许不同   元素具有相同的键值。

它是一种注册表,其中元素可以共享密钥。你可以想到公司和员工。街道地址是关键,员工是价值观。

答案 4 :(得分:0)

以下是Wikipedia关于用途的说明:

  
      
  • 在学生注册系统中,学生可以注册   那里有多个班级   可能是每个人的关联   在课程中注册学生,   密钥是学生ID和   值是课程ID。如果一个   学生参加了三门课程,   会有三个协会   包含相同的密钥。
  •   
  • 书的索引可以报告给定索引的任意数量的引用   术语,因此可以编码为a   从索引术语到任何的多重映射   参考位置数
  •   

答案 5 :(得分:0)

使用multimap,无论您想在何处使用树形结构。

答案 6 :(得分:0)

在向量/列表(或任何其他容器)上使用多集的最重要的好处是查找操作的时间复杂性。 multiset的平均大小写时间复杂度为O(logn),unordered_multiset为O(1)。 multimap和ordered_multimap也是如此。