Sortowanie wektora wskaźników na strukture
Ostatnio zmodyfikowano 2014-04-29 23:29
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? 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 |
|
Monika90 |
» 2014-04-29 00:20:44 Dlaczego nie możesz pisać luźnych funkcji w programie?!??
Zadeklaruj porownajOrganizmy jako metodę statyczną. |
|
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ć: 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. |
|
« 1 » |