多映射与vector映射的优点是什么?

我不明白为什么multimap存在,如果我们可以创buildvector地图或集地图。 对我而言,唯一的区别是:

  • 在multimap中使用equal_range来获得一个键的元素,在vector地图中,我们简单地使用[]运算符并且具有元素的向量。
  • 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,vector情况下嵌套for循环更方便。

另一种看待这个问题的方法是:如果每个关键字有多个条目是很常见的,那么你的结构在地图vector情况下效率更高。 如果他们很less发生,则情况正好相反。

multimap<x, y>map<x, vector<y>>之间有许多重要的区别

一旦你在multimap中插入了一个值,你就知道迭代器会一直保持有效,直到你移除它,这是非常强大的属性,你不能拥有vector地图。

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

迭代器保持有效直到从映射中删除,而在第二种情况下,每次向vector添加新条目时迭代器都将失效。

还要注意map<x, vector<y>>可能有一个用现有键设置的空值,而multimap不能。

这些行为是不同的。

说实话,我错过了一些没有在库中提供的语言的multimap。

两个迭代器? 我认为你错了。

当我使用std :: for_each()或其他algorithm的多图我只使用一个迭代器范围,它是非常简单的担心与每个关键的向量。