如何在不移动的情况下交换地图元素?

Jon*_*Mee 5 c++ swap dictionary c++11 c++03

如果我有两个,我map<string, int>怎么能交换每个元素map

例如:

map<string, int> ps{ { "triangle", 0 }, { "cross", 1 }, { "square", 2 }, { "circle", 3 } };
map<string, int> xbox{ { "y", 0 }, { "a", 1 }, { "b", 2 }, { "x", 3 } };

swap(move(ps["cross"]), move(xbox["x"]));
Run Code Online (Sandbox Code Playgroud)

swap说法显然是错误的,但解释了我想做的事情.在swap声明之后我想ps包含:

  • { "triangle", 0 }
  • { "x", 3 }
  • { "square", 2 }
  • { "circle", 3 }

xbox包含:

  • { "y", 0 }
  • { "a", 1 }
  • { "b", 2 }
  • { "cross", 1 }

我希望有一种很好的方法可以用C++ 11的移动语法来做到这一点,但是如果可能的话,我想要一个答案,它也描述了如何在C++ 03上实现这一点.

Kar*_*ath 5

map 实现为有序树.

您不能简单地用新密钥替换密钥,因为它可能必须放在树中的其他位置.因此,你无法交换.

删除手动重新插入kv对.

(作为旁注:你甚至没有告诉我们这些价值会发生什么......)