【发布时间】:2015-04-13 12:26:49
【问题描述】:
如果我有两个 map<string, int>s,我如何交换每个 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 上完成此操作的答案。
【问题讨论】:
-
你没有用“x”交换“cross”。您正在将“cross”从 ps 移动到 xbox,并将“x”从 xbox 移动到 ps。它们是两个不相关的操作。
-
@NeilKirk 是的,这就是为什么我在问题“交换语句显然是错误的,但这解释了我想要做什么”。将元素移动到相反的
map是我想要做的事情,正如我希望得到的maps 的样子所解释的那样。 -
我什么都不知道。除非它真的是性能问题,否则我不会担心。在这种情况下,您可能会发现平面地图(我相信 boost 中存在数据结构)可能会更快。
标签: c++ c++11 dictionary swap c++03