Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Sortowanie struktury danych

Ostatnio zmodyfikowano 2015-01-03 18:41
Autor Wiadomość
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 ??

P-123521
NopeDotAvi
» 2014-12-29 10:15:55
No skoro masz to w jakimś kontenerze to użyj:
std::sort
 z
#include <algorithm>
P-123525
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
P-123541
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.
P-123553
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]
P-123558
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.
P-123600
1aam2am1
» 2014-12-29 22:15:38
Zamień wyrażenie labda na funkcje
P-123611
NopeDotAvi
» 2014-12-29 22:52:56

nie oblsuguje poki co C++11

Uzywam code blocks'a
Settings->Compiler->Compiler Flags opcja "Have g++ follow the C++11 ISO C++ language standard"
P-123614
« 1 » 2
  Strona 1 z 2 Następna strona