Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ordinare una mappa in ordine decrescente in base al valore
Forum - C/C++ - Ordinare una mappa in ordine decrescente in base al valore

Avatar
cassin.simone (Member)
Guru


Messaggi: 1051
Iscritto: 03/06/2009

Segnala al moderatore
Postato alle 16:56
Giovedì, 18/03/2010
Ciao a tutti, vengo per porvi un problemino magari per molti di voi banale, ma che io non riesco a risolvere. Premetto che sto studiando c++ quindi sono ben accette le critiche ma perdonate l'ignoranza.
Sto utilizzando per un programma una std::map nel seguente modo:
Codice sorgente - presumibilmente Plain Text

  1. map<char,int>frequences;


Mi interesserebbe in qualche modo ordinare in ordine decrescente i valori della mappa in base al valore (ovvero un int). Per chiarirci: se io ho una mappa elaborata dal programma nel seguente modo:
Codice sorgente - presumibilmente Plain Text

  1. frequences['a']=23;
  2. frequences['b']=11;
  3. frequences['c']=55;
  4. frequences['d']=6;


vorrei che me le ordinasse nel seguente modo:
Codice sorgente - presumibilmente Plain Text

  1. frequences['c']=55;
  2. frequences['a']=23;
  3. frequences['b']=11;
  4. frequences['d']=6;



Grazie a tutti in anticipo :k:


Hey, sono anche su Twitter! www.twitter.com/simonecassin
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:00
Giovedì, 18/03/2010
le map sono ordinate per chiave, non per valore...

dovresti creare un:

Codice sorgente - presumibilmente C/C++

  1. std::map<char, int> dizionario;
  2. std::vector< std::pair< int, char >> vettoreDiSupporto;



copiarci dentro il contenuto della map

Codice sorgente - presumibilmente C/C++

  1. std::map<char, int>::const_iterator it;
  2.  
  3. for ( it = dizionario.begin(); it != dizionario.end(); it++ )
  4.   vettoreDiSupporto.push_back( std::pair<int, char>(it->second, it->first) );



e poi dovresti ordinarlo:

Codice sorgente - presumibilmente Plain Text

  1. std::sort(vettoreDiSupporto);



A occhio e croce questo dovrebbe risolvere il tuo problema :)

Ultima modifica effettuata da TheKaneB il 18/03/2010 alle 18:03


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 18:06
Giovedì, 18/03/2010
Le map, come sai già, contengono due valori: una key e un mapped value.
Le key serve ad ordinare gli elementi "mappati". Gli elemementi sono ordinati in ordine crescente in base alla loro chiave. Non ci sono funzioni per ordinare gli elementi in maniera diversa. Questo sistema automatico di ordinamento è la caratteristica principale delle map.
Se vuoi ordinare gli elementi in base al loro valore, a questo punto a cosa ti servirebbe la chiave di ordinamento? :rotfl:

[EDIT:] chiedo scusa, ho postato contemporaneamente a theKaneB...:rotfl:

Ultima modifica effettuata da Matthew il 18/03/2010 alle 18:07


"I have never let my schooling interfere with my education." Mark Twain
PM Quote
Avatar
cassin.simone (Member)
Guru


Messaggi: 1051
Iscritto: 03/06/2009

Segnala al moderatore
Postato alle 19:19
Giovedì, 18/03/2010
Testo quotato

Postato originariamente da Matthew:
Non ci sono funzioni per ordinare gli elementi in maniera diversa.


Pensavo di si 8-|
:rotfl:


Hey, sono anche su Twitter! www.twitter.com/simonecassin
PM Quote
Avatar
cassin.simone (Member)
Guru


Messaggi: 1051
Iscritto: 03/06/2009

Segnala al moderatore
Postato alle 17:00
Venerdì, 19/03/2010
Grazie a tutti! Ieri sera sono riuscito a implementare ciò che TheKaneB aveva suggerito :hail: :rotfl:
A chi interessasse ho scoperto nella documentazione che esiste un metodo che è l'esatto contrario di std::sort ed è std::reverse che ordina il vettore in ordine decrescente. Ma questo scommetto che molti di voi lo sanno già vero? :D


Hey, sono anche su Twitter! www.twitter.com/simonecassin
PM Quote