如果我们可以创建矢量图或集合图,我不明白为什么存在多图。 对我来说,唯一的区别是:
equal_range
获取键的元素,在矢量地图中,我们只使用[]
运算符并具有元素向量。multimap.insert(make_pair(key,value))
在向量地图中添加元素和map_of_vectors[key].push_back(value)
。那么为什么要使用multimap?对我来说,最好有一个向量而不是两个迭代器来获取一个键的所有值。
此问题也适用于vector和unordered_multimap的unordered_map。
答案 0 :(得分:49)
我想说这取决于具有相同键的所有值是否具有您想要解决的关系。
例如,您是否经常使用键X遍历所有元素,或将它们传递给函数,依此类推?然后将它们放在单独的容器中更方便,您可以直接解决。
但是,如果您只有一个项目集合,可能共享相同的键值,为什么要在它们之间使用向量?使用迭代器运行multimap比使用map for vector case的嵌套for循环更方便。
另一种看待这种情况的方法:如果每个键的多个条目非常常见,那么您的结构在地图中的效率会更高。如果它们很少发生,那就相反了。
答案 1 :(得分:48)
multimap<x, y>
和map<x, vector<y>>
将值插入 multimap 后,您就会知道迭代器会保留 有效,直到你删除它,这是非常强大的属性,你不能用矢量地图。
multimap<x,y>::iterator p=mymap.insert(make_pair(a,b));
迭代器在从地图中删除之前一直有效,而在第二种情况下, 每次向向量添加新条目时,它都会失效。
另请注意,map<x, vector<y>>
可能使用现有密钥设置空值,而multimap则不会。
这些是行为不同的不同事物。
说实话,我想念一些语言中的多图,而这些语言并没有在他们的库中提供它。