40

正如问题所述......我不明白multisets / multimaps 的意思。

那么,目的是什么?

4

7 回答 7

45

一些用例:

多图

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

多集

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

  • 一个店铺的存货,所有的产品都有自己的key,剩下的数量就是value
  • 商店的累积销售数据,每次销售产品时,产品 id 都会添加到 multiset 中,从而增加销售量
于 2010-05-18T14:43:16.617 回答
4

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

于 2018-01-12T05:12:31.573 回答
2

如果您遇到大多数情况下键是唯一的但有时它们不是唯一的情况,那么多映射将很有用的一个示例。

例如,如果您正在创建一个使用散列作为键的缓存类。大多数情况下,两个不同的对象不会有相同的散列,所以键是唯一的。但是您可能会遇到不同对象的哈希冲突,因此您需要一个多映射来涵盖这种情况。

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

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

于 2010-05-18T14:34:37.027 回答
2

多重集或多重映射仅适用于可能存在多个特定项目的情况。例如,假设您想为一本书创建索引。你会浏览文本,扔掉所有真正常见的无意义单词(“a”、“an”、“the”等),然后列出所有其他单词,以及每个单词在书中的位置发生了。

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

于 2010-05-18T14:34:50.053 回答
1

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

映射是一种关联容器,它存储由键值和映射值组合形成的元素,与映射容器非常相似,但允许不同的元素具有相同的键值。

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

于 2010-05-18T14:28:30.240 回答
1

以下是维基百科关于用途的说法:

  • 在学生注册系统中,学生可能同时注册多个班级,课程中的每个学生注册可能存在关联,其中键是学生 ID,值是课程 ID。如果一个学生注册了三门课程,将有三个关联包含相同的键。
  • 一本书的索引可以报告给定索引词的任意数量的参考,因此可以编码为从索引词到任意数量的参考位置的多图
于 2010-05-18T14:31:25.440 回答
-2

使用多图,无论您想在哪里使用树型结构。

于 2011-11-26T11:10:42.830 回答