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

How Can I Swap Map Elements without Moving?

如果我有两个 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"]));

swap 声明显然是错误的,但这解释了我想做的事情。在 swap 语句之后,我希望 ps 包含:

xbox包含:

我希望有一种使用 C++11 的移动语法执行此操作的好方法,但如果可能的话,我想要一个还描述如何在 C++03 上完成此操作的答案。

map 实现为有序树。

您不能简单地用新密钥替换密钥,因为它可能必须放在树中的不同位置。因此,您不能交换。

手动删除并重新插入 k-v 对。

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