2015-04-13 18 views
5

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.

+0

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. –

+0

@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. –

+1

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. –

Antwort

5

map ist als geordneter Baum implementiert.

Sie können einen Schlüssel nicht einfach durch einen neuen Schlüssel ersetzen, da er möglicherweise an einer anderen Stelle in der Struktur platziert werden muss. Folglich können Sie nicht tauschen.

Löschen Sie die k-v-Paare manuell erneut.

(Als Nebenbemerkung: Sie haben nicht einmal sagte uns, was mit den Werten geschieht ...)

+0

Ugh, das habe ich gemacht, aber es ist sooo hässlich. Ich werde der Frage Werte hinzufügen. –

+1

Es wäre aber nett, wenn man ein Kartenelement auf eine andere Karte verschieben könnte, ohne den Schlüssel kopieren zu müssen (der Wert kann leicht verschoben werden). –

Verwandte Themen