Sort C++

Programovacie jazyky, rady, poradňa...
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Sort C++

Príspevok od používateľa marek788 »

Ahojte, riesim jednu ulohu, kde potrebujem sortovat ludi, podla triedy ( First class, Business class....) a zaroven podla poradia v akom prisli na stanicu v pripade, ze cestuju rovnakou triedou. Cely zoznam cestujucich je ulozeny vo vektore struktur, ktory chcem zosrtovat pomocou sortu z kniznice algorithm. Napisal som si funkciu compare, no ta vsak nesorti, tak ako by mala. Neviete, kde mam chybu?

Kód: Vybrať všetko

bool compare (CP a , CP b ){
    if(a.valTrieda < b.valTrieda)
        return true;
    else if(a.valTrieda == b.valTrieda && a.poradie < b.poradie)
        return true;
    else
        return false;
}
Tu je vysledok, vidno to hned na prvy pohlad, ze ludia s rovnakymi triedami nie su pod sebou, az na First Class

Kód: Vybrať všetko

Joe::::Maron:::First class::::6
James::::Suddery:::First class::::7
Thomas::::Knapford:::Business class::::4
Peter::::Tidmouth:::Premium economy::::2
Laura::::Knapford:::Steerage::::3
Anne::::Maron:::Premium economy::::5
Edward::::Suddery:::Premium economy::::8
John::::Tidmouth:::Economy class::::1
Tu je cely kod http://pastebin.com/ejvGiNQ6

Dakujem za rady.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Sort C++

Príspevok od používateľa BX »

Skús použiť funkciu stable_sort, miesto sort.
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: Sort C++

Príspevok od používateľa marek788 »

Zial nepomohlo ani to :/ Stale to sorti rovnako. A pritom nechapem, v inej ulohe, co som si skusal som robil v podstate presne to iste, a tam to bez problemov fungovalo.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Sort C++

Príspevok od používateľa BX »

No skopčil som si to, spustil a vyzerá, že to sortí správne, ale máš tam bordel v tých menách tried.
Vypíš si to za sortom

Kód: Vybrať všetko

    sort(ludia.begin(), ludia.end(), compare);

    for( auto it = ludia.begin(); it != ludia.end(); it++ ) // auto je c++11 vec, nahraď si to, keď tak
        cout << it->valTrieda << ": " << it->trieda << " " << it->poradie << "\n";
    cout << "======================\n";
Ako valTrieda sú triedy pokope a vyzerajú správne (viac menej, neviem čo je tam tá nula). Mená sú ale hala-bala.
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: Sort C++

Príspevok od používateľa marek788 »

Ano, mena su hala bala to uznavam, je to len taka cvicna uloha z minuleho roku ako priprava na zapocet :D Hmmm, tak teraz pozeram, ze problem bude niekde inde, a to konkretne v priradovani nazvov tried, pretoze nemoze byt raz 2ka Steerage a druhykrat Business Class... Dakujem pekne. Idem sa na to pozriet.


edit: tak uz som na to prisiel, mal som tam " Steerage" s medzerou na zaciatku.
Mimochodom, je mozne, ze v tom mojom vypise je nejaka blbost? Lebo vypisuje mi to aj tak blbosti, ten tvoj to vypisuje spravne...

Kód: Vybrať všetko

       for( it1 = ludia.begin(); it1 != ludia.end(); it1++ ) 
        cout << it1->valTrieda << ": " << it1->trieda << " " << it1->poradie << "\n";

Kód: Vybrať všetko

  for(int i = 0; i < ludia.size(); i++){
         cout << ludia[i].meno << "::::" << ludia[i].ciel << ":::" << ludia[i].trieda << "::::" << ludia[i].poradie << endl;
     }
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Sort C++

Príspevok od používateľa BX »

Aj to tvoje vypisuje správne, ak tým nahradíš to moje (a teda vypisuješ hneď po sort), alebo aj v metóde Depart (ale samozrejme až po tom, čo zavoláš Arrive, lebo tam je sort)
Kto vie kde to ty vypisuješ...
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: Sort C++

Príspevok od používateľa marek788 »

Vypisoval som to presne na tom istom mieste, kde som vypisoval aj s tvojim for-om. A dostal som dva rozne vystupy :D
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Sort C++

Príspevok od používateľa BX »

To je blbosť. Pošli celý kód, kde sú oba výpisy a ukazujú ti rôzne výstupy.
Napísať odpoveď