我有一个包含超过500万对的多图,我需要用键交换键。
unordered_multimap<int, int> edge;
由于容器的大小和涉及的过程,我宁愿不必通过遍历地图的每个元素来创建具有交换对的新多图。
如果有的话,到位的最佳方法是什么?
答案 0 :(得分:3)
你不能就地做到这一点。
您根据其键的哈希值存储元素的地图。如果要对不同的键(前一个值)进行哈希,则必须重建整个映射,或者考虑使用不同的方法来存储元素。
Boost.Bimap(如Orbit中的Lightness Races所示)例如支持双向无序多重映射。
答案 1 :(得分:3)
正确的做法是根本不要这样做,而是首先要有一个双向地图,你可以在任何一个方向上执行查找。
考虑调查Boost.Bimap。