Minulla on ongelma STL:n mappien kanssa. Miten sellaisen saa järjestettyä helposti datan perusteella?
// STL:n manuaalia mukaillen #include <map> #include <string> using namespace std; int main () { map <string, int> months; months["january"] = 31; months["february"] = 28; months["march"] = 31; months["april"] = 30; months["may"] = 31; months["june"] = 30; months["july"] = 31; months["august"] = 31; months["september"] = 30; months["october"] = 31; months["november"] = 30; months["december"] = 31; // eli ongelma: miten saisin months-mapin järjestetty siten, että kuukausi, jossa on eniten päiviä tulee ensin jne. }
Esimerkiksi BubbleSort-algoritmilla:
Otat toisena olevan ja siirrät ylöspäin kunnes seuraavassa on enemmän päiviä.
Otat kolmentena olevan ja siirrät ylöspäin kunnes seuraavassa on enemmän päiviä.
...
Otat viimeisen kohdan ja siirrät ylöspäin kunnes seuraavassa on enemmän päiviä.
Uskoisin, että lajittelualgoritmeista on ennenkin ollut puhetta...
Siis totta kai voisin tehdä bubble sortin tai vaikka quick sortin, mutta tarkoitan, että kun STL:sää on funktio sort, joka järjestelee iloisesti vektoreita ja listoja, niin että löytyisikö mapillekin vastaava. Mapithan luodaan tyyliin map <key, data, compare, alloc>, mutta tuo alloc on järjestelyä avainten mukaan eikä datan.
Ratkaisin ongelman sitten itse käyttämällä vectoreita mappien sijaan. Ja tuossa yllä olevassa viestissä on virhe, comparea tietenkin siihen järjestelyyn käytetään eikä allocia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.