【发布时间】:2011-02-20 22:27:36
【问题描述】:
【问题讨论】:
标签: c++ stl containers multimap multiset
【问题讨论】:
标签: c++ stl containers multimap multiset
http://www.cplusplus.com/reference/stl/multimap/
地图是一种联想 存储形成的元素的容器 通过键值的组合和 映射值,很像 map 容器,但允许不同 元素具有相同的键值。
这是一种元素可以共享密钥的注册表。你可以想到公司和员工。街道地址是关键,员工是价值。
【讨论】:
这是Wikipedia 所说的关于用途的内容:
- 在学生注册系统中,学生可以注册 多个班同时,有 可能是每个人的关联 学生注册课程, 其中关键是学生证和 该值是课程 ID。如果一个 学生参加了三门课程, 将有三个协会 包含相同的密钥。
- 一本书的索引可以报告给定索引的任意数量的参考文献 术语,因此可以编码为 从索引词到任何的多重映射 参考地点的数量
【讨论】:
如果您遇到的情况是,在大多数情况下键是唯一的,但有时它们不是唯一的,那么多映射将很有用。
例如,如果您正在创建一个使用哈希作为键的缓存类。大多数情况下,两个不同的对象不会有相同的散列,所以键是唯一的。但是您可能会遇到不同对象的哈希冲突,因此您需要一个多重映射来涵盖这种情况。
另一个例子是任何类型的非唯一索引(例如在数据库中)。
至于多重集合——我认为那些用处不大。我唯一能想到的就是将它用作一种自动排序的列表。
【讨论】:
多重集或多重映射仅适用于可能存在多个特定项目的情况。例如,假设您想为一本书创建索引。你会浏览文本,扔掉所有真正常见的无意义单词(“a”、“an”、“the”等),然后列出所有其他单词,以及每个单词在书中的位置发生了。
相当多的单词会出现在多个页面上,在这种情况下,您将有多个条目从一个单词映射到不同的页面。一种处理方法是使用从单词到页码的多重映射。
【讨论】:
一些用例:
多地图
多组
本质上是一个带有键和整数计数的映射。
【讨论】:
使用多图,无论您想在何处使用树状结构。
【讨论】:
在向量/列表(或任何其他容器)上使用多重集的最重要的好处是查找操作的时间复杂度。 multiset 的平均情况时间复杂度为 O(logn),unordered_multiset 为 O(1)。 multimap 和 ordered_multimap 也是如此。
【讨论】: