Oppure

Loading
18/03/10 15:56
cassin.simone
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:
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:
frequences['a']=23;
frequences['b']=11;
frequences['c']=55;
frequences['d']=6;

vorrei che me le ordinasse nel seguente modo:
frequences['c']=55;
frequences['a']=23;
frequences['b']=11;
frequences['d']=6;


Grazie a tutti in anticipo :k:
aaa
18/03/10 17:00
TheKaneB
le map sono ordinate per chiave, non per valore...

dovresti creare un:

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


copiarci dentro il contenuto della map


std::map<char, int>::const_iterator it;

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



e poi dovresti ordinarlo:

std::sort(vettoreDiSupporto);


A occhio e croce questo dovrebbe risolvere il tuo problema :)
Ultima modifica effettuata da TheKaneB 18/03/10 17:03
aaa
18/03/10 17:06
Matthew
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 18/03/10 17:07
aaa
18/03/10 18:19
cassin.simone
Postato originariamente da Matthew:
Non ci sono funzioni per ordinare gli elementi in maniera diversa.

Pensavo di si 8-|
:rotfl:
aaa
19/03/10 16:00
cassin.simone
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
aaa