Mar*_*ski 68 c++ stl map multimap
如果我们可以创建矢量图或集合图,我不明白为什么存在多图.对我来说,唯一的区别是:
equal_range在多重映射为获得一个关键的要素和载体,我们只需使用的地图[]运营商,拥有元素的矢量.multimap.insert(make_pair(key,value))在多重映射为添加元素和map_of_vectors[key].push_back(value)在载体的图谱.那么为什么要使用multimap呢?对我来说,最好有一个向量而不是两个迭代器来获取一个键的所有值.
此问题也适用于vector和unordered_multimap的unordered_map.
ypn*_*nos 51
我会说这取决于具有相同键的所有值是否具有您想要解决的关系.
例如,您是否经常使用键X遍历所有元素,或将它们传递给函数,依此类推?然后将它们放在单独的容器中更方便,您可以直接进行寻址.
但是,如果你只有一个项目集合,它们可能共享相同的键值,为什么要在它们之间使用向量?使用迭代器运行multimap比使用map for vector case的嵌套for循环更方便.
另一种看待这种情况的方法:如果每个键的多个条目非常常见,那么您的结构在地图中的效率会更高.如果他们很少发生,则相反.
Art*_*yom 50
multimap<x, y>和之间有许多重要的区别map<x, vector<y>>
一旦你在multimap中插入了一个值,就会知道迭代器在你删除它之前一直有效,这是一个非常强大的属性,你不能用它来映射向量.
multimap<x,y>::iterator p=mymap.insert(make_pair(a,b));
Run Code Online (Sandbox Code Playgroud)
迭代器在从映射中删除之前一直有效,而在第二种情况下,每次向向量添加新条目时它都会失效.
另请注意,map<x, vector<y>>可能使用现有键设置空值,而multimap则不会.
这些是表现不同的不同事物.
说实话,我想念一些语言中的multimap,而这些语言并没有在他们的库中提供.
| 归档时间: |
|
| 查看次数: |
16526 次 |
| 最近记录: |