2015-04-13 81 views
5

Se ho due map<string, int> s come posso scambiare un elemento da ogni map?Come posso scambiare gli elementi della mappa senza spostarli?

Ad esempio:

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"])); 

La dichiarazione swap è chiaramente sbagliato, ma che spiega quello che voglio fare. Dopo la dichiarazione swap mi piacerebbe ps per contenere:

  • { "triangle", 0 }
  • { "x", 3 }
  • { "square", 2 }
  • { "circle", 3 }

E xbox per contenere:

  • { "y", 0 }
  • { "a", 1 }
  • { "b", 2 }
  • { "cross", 1 }

mi aspetto che ci sia un buon modo per fare questo con la sintassi mossa C++ 11 di, ma, se possibile, mi piacerebbe una risposta che anche descrive come realizzarlo su C++ 03.

+0

Lei non è scambiare "croce" con "x". Stai spostando "croce" da ps a xbox e "x" da xbox a ps. Sono due operazioni indipendenti. –

+0

@NeilKirk Giusto è per questo che dico nella domanda "La dichiarazione swap è chiaramente sbagliata, ma questo spiega cosa voglio fare." Spostare gli elementi nella 'mappa' opposta è quello che sto cercando di fare, come è spiegato da ciò che voglio che la risultante' map's assomigli. –

+1

Non so in alcun modo. Non me ne preoccuperei a meno che non sia davvero un problema di prestazioni. Nel qual caso potresti scoprire che una mappa piatta (la struttura dei dati esiste in boost credo) potrebbe essere ancora più veloce. –

risposta

5

map viene implementato come un albero ordinato.

Non è possibile semplicemente sostituire una chiave con una nuova chiave in quanto potrebbe essere necessario posizionarla in una posizione diversa nell'albero. Di conseguenza, non puoi scambiare.

Eliminare un reinserire manualmente le coppie k-v.

(Come sidenote: non hai nemmeno ci ha detto ciò che accade con i valori ...)

+0

Ugh, questo è quello che stavo facendo, ma è davvero brutto. Aggiungerò i valori alla domanda. –

+1

Sarebbe bello se si potesse spostare un elemento della mappa in un'altra mappa senza dover copiare la chiave (il valore può essere spostato facilmente). –