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

时间:2010-12-14 09:53:00

标签: c++ stl map multimap

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

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

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

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

2 个答案:

答案 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则不会。

这些是行为不同的不同事物。

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

相关问题