sortowanie wektora wlasnych obiektów

0

Witam, muszę zrealizować sortowanie wektora własnych obiektów, według wytycznych:

-sortowanie alfabetyczne po nazwisku
-sortowanie po dacie urodzenia
-obydwa z powyższych sortowao z uwzględnieniem różnych kategorii

Mam klasę bazową Pracownicy:

 class Pracownicy{
protected:
    string imie;
    string nazwisko;
    int rok_urodzenia;
public:
    virtual void wypisz();
    Pracownicy();
    Pracownicy(string i, string n, int r_u);
    virtual ~Pracownicy();

};

oraz wektor:

 vector<Pracownicy*> Lista

Jeśli chcę posortować ten wektor to nie mogę zrobić funkcji:

 sort( Lista.begin(), Lista.end() );

muszę mieć funkcję moje_sort dla każdego z typów sortowań.
pytanie polega na tym jak w klasie w której mam zadeklarowany

 vector<Pracownicy*> Lista

jak stworzyć funkcję moje_sort aby sortowała według parametru imie?

1

Do funkcji std::sort możesz podać trzeci argument, warunek sortowania, który definiujesz sam.
więcej tu:http://www.cplusplus.com/reference/algorithm/sort/
np.

bool sort_name(std::string first,std::string second)
{
return first < second;
}

co do daty, to nie wiem jak ją przechowujesz.

1

Do funkcji sort możesz dac własny komparator jako trzeci argument.

2

Zakładając, że ta funkcja ma dostęp do zmiennej imie klasy Pracownicy (swoją drogą ta klasa powinna się nazywać Pracownik):

bool moje_sort(Pracownicy* lewy, Pracownicy* prawy)
{
    return lewy->imie < prawy->imie;
}
0

W tym miejscu czyli w klasie zarządca nie ma dostępu to Pracownik->imie.
Czy mogę zdeklarować tą funkcję(moje_sort) w klasie Pracownik a następnie odwołać się do niej operatorem :: jako 3 argument funkcji sort?

Edit1:
Ok mogę tak zrobić ;)
Dziękuję za podpowiedzi!

0

Poprawniej to zrobić jako funkcje statyczną.

0

Dwa pierwsze sortowania zrobiłem tak:

 static bool po_nazwisku(Pracownik* A, Pracownik* B);

to w klasie Pracownik, a w klasie Zarządca:

 void Zarzadca::sort_alfabetyczne(){
    sort( Lista.begin(), Lista.end(), Pracownik::po_nazwisku);
}

Teraz pytanie jak zrobić te 3 sortowanie.
Ma to wykonywać tak że jeśli wybiorę sortowanie Pracowników z klasy pochodnej "Programista" ma posortować tylko ich i wypisać, jak to mogę zrealizować, czy mogę wykorzystać funkcję z klasy bazowej którą napisałem? Jakie będzie najlepsze rozwiązanie?

1
bool dbl_cmp(Pracownicy* lewy, Pracownicy* prawy) { return lewy->kategoria!=prawy->kategoria?lewy->kategoria<prawy->kategoria:lewy->imie< prawy->imie; }
0

Dziękuję bardzo.

0

Narodziło się kolejne pytanie jak zapisać wektor obiektów do pliku tekstowego?

Plik.write(( char * ) & Lista[0], Lista.size() * sizeof( Pracownik ) ); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0