Wenn ich zwei map<string, int>
s habe, wie kann ich ein Element von jedem austauschen map
?Wie kann ich Kartenelemente austauschen, ohne sich zu bewegen?
Zum Beispiel:
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"]));
Die swap
Aussage ist eindeutig falsch, aber das erklärt, was ich tun will. Nach der swap
Aussage würde ich ps
gerne enthalten:
{ "triangle", 0 }
{ "x", 3 }
{ "square", 2 }
{ "circle", 3 }
Und xbox
enthalten:
{ "y", 0 }
{ "a", 1 }
{ "b", 2 }
{ "cross", 1 }
Ich erwarte, dass es eine gute Möglichkeit ist, dies mit C++ 11 Umzug Syntax zu tun, aber wenn möglich, würde ich gern eine Antwort, die auch beschreibt, wie dies auf C++ 03 zu erreichen ist.
Sie tauschen nicht „Kreuz“ mit „x“. Sie bewegen "cross" von ps zu xbox und "x" von xbox zu ps. Sie sind zwei unabhängige Operationen. –
@NeilKirk Richtig deshalb sage ich in der Frage "Die Swap-Aussage ist eindeutig falsch, aber das erklärt, was ich tun will." Das Verschieben der Elemente in die entgegengesetzte "Map" ist das, was ich versuche, zu erklären, wie die resultierenden 'map' aussehen sollen. –
Ich kenne keinen Weg. Ich würde mir keine Sorgen machen, es sei denn, es ist wirklich ein Leistungsproblem. In diesem Fall könnten Sie feststellen, dass eine flache Karte (Datenstruktur existiert in Boost, glaube ich) noch schneller sein könnte. –