在multimap <int,int =“”> </int,>中交换每对值

时间:2014-06-07 13:52:25

标签: c++ map stl swap multimap

我有一个包含超过500万对的多图,我需要用键交换键。

unordered_multimap<int, int> edge;

由于容器的大小和涉及的过程,我宁愿不必通过遍历地图的每个元素来创建具有交换对的新多图。

如果有的话,到位的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

你不能就地做到这一点。

您根据其键的哈希值存储元素的地图。如果要对不同的键(前一个值)进行哈希,则必须重建整个映射,或者考虑使用不同的方法来存储元素。

Boost.Bimap(如Orbit中的Lightness Races所示)例如支持双向无序多重映射。

答案 1 :(得分:3)

正确的做法是根本不要这样做,而是首先要有一个双向地图,你可以在任何一个方向上执行查找。

考虑调查Boost.Bimap