如何在不移动的情况下交换地图元素?
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
包含:
{ "triangle", 0 }
{ "x", 3 }
{ "square", 2 }
{ "circle", 3 }
和xbox
包含:
{ "y", 0 }
{ "a", 1 }
{ "b", 2 }
{ "cross", 1 }
我希望有一种使用 C++11 的移动语法执行此操作的好方法,但如果可能的话,我想要一个还描述如何在 C++03 上完成此操作的答案。
map
实现为有序树。
您不能简单地用新密钥替换密钥,因为它可能必须放在树中的不同位置。因此,您不能交换。
手动删除并重新插入 k-v 对。
(作为旁注:您甚至没有告诉我们这些值发生了什么...)
如果我有两个 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
包含:
{ "triangle", 0 }
{ "x", 3 }
{ "square", 2 }
{ "circle", 3 }
和xbox
包含:
{ "y", 0 }
{ "a", 1 }
{ "b", 2 }
{ "cross", 1 }
我希望有一种使用 C++11 的移动语法执行此操作的好方法,但如果可能的话,我想要一个还描述如何在 C++03 上完成此操作的答案。
map
实现为有序树。
您不能简单地用新密钥替换密钥,因为它可能必须放在树中的不同位置。因此,您不能交换。
手动删除并重新插入 k-v 对。
(作为旁注:您甚至没有告诉我们这些值发生了什么...)