多映射与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的多图我只使用一个迭代器范围,它是非常简单的担心与每个关键的向量。