2010-10-21 24 views
5

C'è un modo per ordinare std :: map in base ai dati anziché alla chiave? In questo momento il mio codice duplica l'intera mappa in un array solo per farlo.std :: map ordina per dati?

+1

Indovina che hai bisogno di un'altra mappa con chiave/valore invertito? –

+0

Non ho trovato una buona soluzione. Non puoi semplicemente scambiare la mappa (come molti suggeriscono) perché due valori potrebbero essere gli stessi, creando una nuova mappa che potrebbe avere meno elementi. In effetti ** è impossibile ** ordinare una mappa in base al valore, in quanto una mappa è ordinata per chiave (quindi perché è veloce). Anche se provi a creare una nuova mappa che viene ordinata, spingendo i valori come un vettore, ti ritroverai comunque con una mappa ordinata per tasto !!! Il modo in cui ho implementato il mio codice è stato quello di creare vettori ordinati per ciascuna delle chiavi e dei valori e utilizzare i vettori nella mia applicazione. Per creare i vettori, prima io – user2544830

+0

Possibile duplicato di [mappa STL -> ordina per valore?] (Http://stackoverflow.com/questions/2699060/stl-map-sort-by-value) –

risposta

3

Per quanto posso ricordare, std::map ti darà l'iteratore che passerà attraverso gli elementi ordinati dalla chiave. L'unico modo per esaminare gli elementi ordinati in base al valore e utilizzare comunque la mappa è riscrivere l'intera raccolta su un'altra mappa, con chiave e valore invertiti.

+0

Ho scoperto che usare un singolo vettore e semplicemente trovare le cose era meglio. – Jookia

+2

In tal caso, si perderanno le informazioni sulla coppia valore-chiave. –

+0

Indico la risposta di Oli Charlesworth all'indirizzo http://stackoverflow.com/a/5056797/158371 –