2016-02-21 27 views
5

In altre parole, è sicuro archiviare i puntatori alle chiavi da una mappa? Oppure è possibile che la mappa copi e sposti le chiavi durante la sua durata, invalidando così i puntatori esistenti?std :: map: può copiare e spostare le chiavi dopo che sono state inserite?

I documenti dicono: "validità Iterator: nessuna modifica". Significa che la risposta alla mia domanda è "no, non possono essere copiati o spostati"?

+1

Quali documenti? –

risposta

7

Il modello contenitore std::map fornisce un basato nodo contenitore, il che significa che iteratori e riferimenti ad un elemento contenitore sono mai invalidati finché l'elemento viene cancellato dalla mappa. Quindi puoi distribuire gli indirizzi chiave degli elementi a terzi purché la mappa sia viva e l'elemento rimanga all'interno di esso.

+0

Grande, grazie per aver chiarito. Per caso sai dove è specificato nei documenti? – Chris

+0

Non è possibile che un'implementazione utilizzi iteratori basati su indici in modo che la validità sia garantita ma gli elementi effettivi vengano spostati nella memoria? In caso contrario, dove è dichiarato? – 6502

+0

@Chris: [associative.reqmts]/9. –