rendered paste body#include <cstdio>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
class Ludek
{
public:
string nazwisko;
string imie;
double wynagrodzenie;
Ludek(string naz,string im,double kwota):nazwisko(naz),imie(im),wynagrodzenie(kwota){};
friend ostream & operator<<(ostream &w,Ludek *w1)
{
w << w1->nazwisko<<" "<<w1->imie << " : "<< w1->wynagrodzenie;
return w;
};
};
struct sortuj_rosnaco:public binary_function<Ludek *,Ludek *,bool>
{
static bool rosnaco;
bool operator()(Ludek *pier,Ludek *drug)
{
string tmp=pier->nazwisko+" "+pier->imie;
string tmp2=drug->nazwisko+" "+drug->imie;
if(rosnaco)
return lexicographical_compare(tmp.begin(),tmp.end(),tmp2.begin(),tmp2.end());
else
return !lexicographical_compare(tmp.begin(),tmp.end(),tmp2.begin(),tmp2.end());
};
};
struct mniejsze_wyn:public binary_function<Ludek *,double,bool>// klasa obiektu funkcyjny do znalezienia mniejszego wynagrodzenia
{
bool operator()(Ludek *pier,double kwota)
{
return pier->wynagrodzenie<kwota;
};
};
struct sumuj:public unary_function<Ludek *,void>//---klasa obiekt funkcyjny do sumowania wynagrodzen
{
double suma;
sumuj():suma(0){};
void operator ()(Ludek *w)
{
suma+=w->wynagrodzenie;
}
};
bool sortuj_rosnaco::rosnaco=true;
int main(int argc, char* argv[])
{
vector<Ludek *>p;
p.push_back(new Ludek("jakis drugi", "imie 23",1200));
p.push_back(new Ludek("jakis drugi", "imie 22",800));
p.push_back(new Ludek("jakis drugi", "imie 22",2300));
p.push_back(new Ludek("jakis drugi", "imie 24",3423));
sort(p.begin(),p.end(),sortuj_rosnaco()); //--sortowanie z funktorem binarnym rosnaco
cout << "Rosnaco: " << endl;
copy(p.begin(), p.end(), ostream_iterator<Ludek *>(cout, "\n"));
sortuj_rosnaco::rosnaco=false;
sort(p.begin(),p.end(),sortuj_rosnaco()); //--sortowanie z funktorem binarnym malejaco
cout << "Malejaco: " << endl;
copy(p.begin(), p.end(), ostream_iterator<Ludek *>(cout, "\n"));
vector<Ludek *>temp;
remove_copy_if(p.begin(),p.end(),back_inserter(temp),bind2nd(mniejsze_wyn(),1300));
cout << "Z wiekszym wynagrodzeniem od 1300: " << endl;
copy(temp.begin(), temp.end(), ostream_iterator<Ludek *>(cout, "\n"));
sumuj Suma;
Suma=for_each(p.begin(),p.end(),Suma);
cout <<"Suma wszystkich wynagrodzen:"<<endl;
cout<< Suma.suma<<endl;
Suma.suma=0;
Suma=for_each(temp.begin(),temp.end(),Suma);
cout <<"Suma wszystkich wynagrodzen powyzej 1300:"<<endl;
cout<< Suma.suma<<endl;
cin.get();
return 0;
}
//---------------------------------------------------------------------------