[C++] Sortowanie struktury danych
Ostatnio zmodyfikowano 2015-01-03 18:41
Vanilka Temat założony przez niniejszego użytkownika |
[C++] Sortowanie struktury danych » 2014-12-29 02:55:16 Witam, Mam problem z sortowaniem, ktory nie tyle dotyczy skryptu, ktory nie dziala, a problemu "jak mam sie za to zabrac".. Otoz, w moim programie stworzylam plik na Tablice Wynikow. Zeby go nieco uchronic przed recznym poprawianiem i uniknac zlego wyswietlania chce aby moj program wczytywal te zawartosc do pliku i sprawdzil czy jest wlasciwie posortowana. Potem wyselekcjonowal to co powinien .. i wyswietlil na ekran... plik ma zawierac 3 kolumny danych. Imie gracza, punkty, oraz poziom W tym celu stworzylam sobie strukture
struct WG { string nazwaGracza; int punktyWG; int poziomWG; };
te strukture wczytuje do kontenera. i z pliku zczytuje odpowiednie dane. Do tego momentu jest wszystko cacy :) docelowo chce aby wyniki byly wyswietlane dla kazdego poziomu osobno. Czy moge to posegregowac w ramach 1 tablicy, czy musze dane z "duzej " tablicy skopiowac do 5 mniejszych tablic ( mam 5 poziomow), czy moze jest jakis inny lepszy sposob na rozwiazanie problemu ?? |
|
NopeDotAvi |
» 2014-12-29 10:15:55 No skoro masz to w jakimś kontenerze to użyj: std::sort z #include <algorithm> |
|
Vanilka Temat założony przez niniejszego użytkownika |
» 2014-12-29 15:50:06 no nawet myslam z sortem.. ale nie wiem jak tego uzyc na takim vectorze struktur.. bo on jak widze sie zachowuje inaczej niz zwykly wektor..
probowalam zrobic sortowanie babelkowe i nie zadzialalo mi erase i insert |
|
Monika90 |
» 2014-12-29 16:12:03 Żeby posortować wektor struktur trzeba zdefiniować jakąś funkcję porównującą struktury. Można użyć wyrażenia lambda std::sort(wyniki.begin(), wyniki.end(), [](const WG& wg1, const WG& wg2) { return wg1.poziomWG < wg2.poziomWG || wg1.poziomWG == wg2.poziomWG && (wg1.punktyWG < wg2.punktyWG || wg1.punktyWG == wg2.punktyWG && wg1.nazwaGracza < wg2.nazwaGracza); });
Nie wiem czy to skomplikowane wyrażenie w środku jest poprawne. Lambda ma zwrócić true jeżeli wg1 ma wystąpić w posortowanym wektorze przed wg2, a false w przeciwnym wypadku. probowalam zrobic sortowanie babelkowe i nie zadzialalo mi erase i insert |
Można użyć std::swap do zamiany elementów miejscami. |
|
Vanilka Temat założony przez niniejszego użytkownika |
» 2014-12-29 16:32:27 swap mi tez nie zadzialalo ale chyba zrobilam to zle.. bo wpisawalm swap ( tablica[i], tablica[i-1] )
Zrobilam to w tne sposob, bo pworobowlaam sobie wyobrazic moja tabele w taki sposob, niczym tablice z 1 kolumna gdzie do kazdej kratki jest dorzucona tylko struktura.. wiec w moim kodzie, porownywane byly elementy poziom w 2 bloczkach i jesli true to funckja miala przestawic bloczki.. no ale coz nie zadzialalo, wiec moje wyobrazenie tego musi byc bledne.[/i] |
|
Vanilka Temat założony przez niniejszego użytkownika |
» 2014-12-29 20:05:55 szukalam o wyrazeniac lambda.. tyle ze moj kompilator nie oblsuguje poki co C++11 ... jakis inny pomysl ??
Uzywam code blocks'a na czysto pobranego ze strony. |
|
1aam2am1 |
» 2014-12-29 22:15:38 Zamień wyrażenie labda na funkcje |
|
NopeDotAvi |
» 2014-12-29 22:52:56 nie oblsuguje poki co C++11
|
Settings->Compiler->Compiler Flags opcja "Have g++ follow the C++11 ISO C++ language standard" |
|
« 1 » 2 |