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

Sortowanie wektora wskaźników na strukture

Ostatnio zmodyfikowano 2014-04-29 23:29
Autor Wiadomość
Kuaczor
Temat założony przez niniejszego użytkownika
Sortowanie wektora wskaźników na strukture
» 2014-04-28 22:02:46
Posiadam klasę bazową Organizm, która potem jest dziedziczona przez Roślina i Zwierze i potem przez poszczególne organizmy. Wszystkie organizmy jakie tworze podczas trwania programu przetrzymuje w wektorze w klasie Świat. Zastanawiam się jak posortować taki wektor. Ma ktoś jakąś rade? Próbowałem coś takiego, ale kompilator się pluje i nie wiem jak to zmienić. Tak jakby metoda, nie mogła być argumentem sorta, ale wtedy jak to zrobić, jeżeli nie mogę pisać luźnych funkcji w programie?

C/C++
bool Swiat::porownajOrganizmy( Organizm * pierwszy, Organizm * drugi ) {
    if( pierwszy->getInic() > drugi->getInic() ) {
        return true;
    } else if( pierwszy->getInic() == drugi->getInic() ) {
        if( pierwszy->getWiek() > drugi->getWiek() ) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}
void Swiat::sortujWektor() {
    sort( kontenerOrganizmow.begin(), kontenerOrganizmow.end(), porownajOrganizmy );
}

Błędy:
Error 1 error C3867: 'Swiat::porownajOrganizmy': function call missing argument list; use '&Swiat::porownajOrganizmy' to create a pointer to member c:\users\kaczor\documents\visual studio 2012\projects\consoleapplication5\consoleapplication5\swiat.cpp 153
Error 2 error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided c:\users\kaczor\documents\visual studio 2012\projects\consoleapplication5\consoleapplication5\swiat.cpp 153
P-108882
Monika90
» 2014-04-29 00:20:44
Dlaczego nie możesz pisać luźnych funkcji w programie?!??

Zadeklaruj porownajOrganizmy jako metodę statyczną.
P-108892
libed
» 2014-04-29 23:29:06
Ponieważ funkcja porównująca jest metodą klasy niejawnie przekazywany jest argument 'this'. Dlatego kompilator zgłasza błąd z nieprawidłową liczbą parametrów.
Jeśli korzystasz z C++11 możesz użyć:
C/C++
std::function < bool( Organizm *, Organizm * ) > comparer = std::bind( & Swiat::PorownajOrganizmy, this, std::placeholders::_1, std::placeholders::_2 );
std::sort( wektor.begin(), wektor.end(), comparer );

PS. Strasznie głupio wyglądają nazwy typu getWiek.
P-108941
« 1 »
  Strona 1 z 1