sortowanie wektora wlasnych obiektów

Odpowiedz Nowy wątek
2015-01-17 18:49
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?

edytowany 1x, ostatnio: Zimny993, 2015-01-17 18:49

Pozostało 580 znaków

2015-01-17 19:05
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.

edytowany 2x, ostatnio: _borisov8, 2015-01-17 19:09

Pozostało 580 znaków

2015-01-17 19:06
Dwurożny Jednorożec
1

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

Pozostało 580 znaków

2015-01-17 19:11
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;
}

Pozostało 580 znaków

2015-01-17 19:18
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!

edytowany 2x, ostatnio: Zimny993, 2015-01-17 19:45

Pozostało 580 znaków

2015-01-17 20:34
0

Poprawniej to zrobić jako funkcje statyczną.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-17 20:50
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?

Pozostało 580 znaków

2015-01-17 21:14
1
bool dbl_cmp(Pracownicy* lewy, Pracownicy* prawy) { return lewy->kategoria!=prawy->kategoria?lewy->kategoria<prawy->kategoria:lewy->imie< prawy->imie; }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-17 22:42
0

Dziękuję bardzo.

edytowany 3x, ostatnio: Zimny993, 2015-01-18 00:18

Pozostało 580 znaków

2015-01-18 00:18
0

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

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

Pozostało 580 znaków

2015-01-18 01:07
0

Zapisuj rekord po rekordzie
Zdefiniuj sobie operator<<
I użyj to: http://www.cplusplus.com/reference/iterator/ostream_iterator/

To co podałeś nie ma prawa działać ponieważ masz użyte obiekty typu string


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-18 01:07

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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