繁体   English   中英

多图在矢量图上有什么优势?

[英]What's the advantage of multimap over map of vectors?

如果我们可以创建矢量图或集合图,我不明白为什么存在多图。 对我来说,唯一的区别是:

  • 使用multimap中的equal_range来获取键的元素,并在向量的映射中,我们只需使用[]运算符并具有元素的向量。
  • multimap.insert(make_pair(key,value))使用multimap.insert(make_pair(key,value))在向量的映射中添加元素和map_of_vectors[key].push_back(value)

那么为什么要使用multimap呢? 对我来说,最好有一个向量而不是两个迭代器来获取一个键的所有值。

此问题也适用于vector和unordered_multimap的unordered_map。

我想说这取决于具有相同键的所有值是否具有您想要解决的关系。

例如,您是否经常使用键X遍历所有元素,或将它们传递给函数,依此类推? 然后将它们放在单独的容器中更方便,您可以直接进行寻址。

但是,如果你只有一个项目集合,它们可能共享相同的键值,为什么要在它们之间使用向量? 使用迭代器运行multimap比使用map for vector case的嵌套for循环更方便。

另一种看待这种情况的方法:如果每个键的多个条目非常常见,那么您的结构在地图中的效率会更高。 如果他们很少发生,则相反。

multimap<x, y>map<x, vector<y>>之间存在许多重要差异

一旦你在multimap中插入了一个值,就会知道迭代器在你删除它之前一直有效,这是一个非常强大的属性,你不能用它来映射向量。

multimap<x,y>::iterator p=mymap.insert(make_pair(a,b));

迭代器在从映射中删除之前一直有效,而在第二种情况下,每次向向量添加新条目时它都会失效。

另请注意, map<x, vector<y>>可能具有使用现有键设置的空值,而multimap不具有。

这些是表现不同的不同事物。

说实话,我想念一些语言中的multimap,而这些语言并没有在他们的库中提供。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM