All pastes #948790 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-03-19 13:04 UTC
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;
}
//---------------------------------------------------------------------------