
//
// To jest przykładowy kod z podrozdziału 21.4.2 „Predykaty składowych klas” książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

struct Record {
    string name;        // Standardowy łańcuch zastosowany dla ułatwienia.
    char addr[24];    // Stary styl, aby dostosować się do baz danych.
    // ...
};

//------------------------------------------------------------------------------

// Różne sposoby porównywania obiektów typu Record:

struct  Cmp_by_name {
    bool operator()(const Record& a, const Record& b) const
    { return a.name < b.name; }
};

//------------------------------------------------------------------------------

struct  Cmp_by_addr {
    bool operator()(const Record& a, const Record& b) const
    { return strncmp(a.addr, b.addr, 24) < 0; }    // !!!
};

//------------------------------------------------------------------------------

int main()
{
    vector<Record> vr;

    // ...
    sort(vr.begin(), vr.end(), Cmp_by_name());    // sortowanie według nazw
    // ...
    sort(vr.begin(), vr.end(), Cmp_by_addr());    // sortowanie według adresów
    // ...
}

//------------------------------------------------------------------------------
