
рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ C ++ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рд▓рд┐рдЦрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХрд╛рд░реНрдп рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреЛ рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЫрдВрдЯрдиреА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ:
рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╕реНрддреБ (рдЕрдВрдЧреНрд░реЗрдЬреА рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ), рд╕рд╛рде рд╣реА рдПрдХ рдлрд╝рдВрдХреНрд╢рдирд▓, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдлрд╝рдВрдХреНрд╢рдиреЙрдЗрдб, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдЖрдо рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдПрдХ рдХреЙрд▓рдмреИрдХ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЛ рддреБрд░рдВрдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЖрд╕рд╛рдиреА рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдореИрдВ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред рдХрд╛рд░реНрдп рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡реЗрджрдХ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реИред
C ++ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ 150 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ main.cpp рдлрд╝рд╛рдЗрд▓ рд╣реЛрддреА рд╣реИред рд╣рдо рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╢рд░реНрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднрд░рддреЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐ (рд╡реНрдпрдХреНрддрд┐), рдиреМрдХрд░реА (рдХрд╛рд░реНрдп рдХрд╛ рд╕реНрдерд╛рди), рд╕реНрдерд┐рддрд┐ (рд╕реНрдерд┐рддрд┐) рд╡рд░реНрдЧ рд╣реИрдВред
#include <string> struct Person{ Person(); Person(const string& _lastName, const string& _firstName, int _age, int _job_id, int _position_id); string lastName; string firstName; int age; int job_id; int position_id; }; struct Job{ Job(); Job(const string& _name, int _id); string name; int id; }; struct Position{ Position(); Position(const string& _name, int _id); string name; int id; };
PersonsList рд╡рд░реНрдЧ std :: рд╡реЗрдХреНрдЯрд░, рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдФрд░ рдкрджреЛрдВ рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдЕрдкрдиреА рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдиреМрдХрд░реА рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
#include <vector> #include <map> class PersonsList{ public: void addPerson(const Person& person); void addPosition(const Position& position); void addJob(const Job& job); void print(); void sortByName(); void sortByAge(); void sortByJob(); private: std::vector<Person> persons; std::map<int,Job> jobsMap; std::map<int,Position> positionsMap; };
рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдереИрддрд┐рдХ рддреБрд▓рдирд╛ рд╕рдорд╛рд░реЛрд╣ рдФрд░ рдПрд╕рдЯреАрдбреА :: static_sort рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрдБрдЯрд╛рдИ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
#include <algorithm> bool compareByName(const Person& person1, const Person& person2){ if(person1.lastName==person2.lastName){ return person1.firstName<person2.firstName; } return person1.lastName<person2.lastName; } void PersonsList::sortByName(){ stable_sort(persons.begin(),persons.end(),compareByName); }
рдореБрдЦреНрдп рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднрд░ рд░рд╣рд╛ рд╣реИ, рдЫрдБрдЯрд╛рдИ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред
int main () #include <iostream> int main() { PersonsList list; Job google("Google",1); Job microsoft("Microsoft",2); Job hp("Hewlett-Packard",3); list.addJob(google); list.addJob(microsoft); list.addJob(hp); Position junior("Junior developer",1); Position senior("Senior developer",2); Position manager("Manager",3); list.addPosition(junior); list.addPosition(senior); list.addPosition(manager); list.addPerson(Person("Ivanov","Ivan",21,google.id,junior.id)); list.addPerson(Person("Sidorov","Nikolay",28,google.id,senior.id)); list.addPerson(Person("Ivanov","Maxim",28,google.id,manager.id)); list.addPerson(Person("Volkova","Katerina",22,microsoft.id,junior.id)); list.addPerson(Person("Demidov","Vitaly",35,microsoft.id,manager.id)); list.addPerson(Person("Bodrov","Boris",40,hp.id,senior.id)); list.sortByName(); cout<<"Sorted by name:"<<endl; list.print(); cout<<endl; list.sortByAge(); cout<<"Sorted by age:"<<endl; list.print(); cout<<endl; list.sortByJob(); cout<<"Sorted by job:"<<endl; list.print(); return 0; }
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрджреНрдзреГрдд рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, рдореИрдВрдиреЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг рд╕реНрд░реЛрдд:
рдкреВрд░реНрдг рд╕реНрд░реЛрдд #include <iostream> #include <iomanip> #include <string> #include <vector> #include <map> #include <algorithm> using namespace std; struct Person{ Person():lastName("noname"),firstName(""),age(0),job_id(0),position_id(0){} Person(const string& _lastName, const string& _firstName, int _age, int _job_id, int _position_id) :lastName(_lastName), firstName(_firstName), age(_age), job_id(_job_id), position_id(_position_id) {} string lastName; string firstName; int age; int job_id; int position_id; }; struct Job{ Job():name("invalid job"),id(-1){} Job(const string& _name, int _id):name(_name),id(_id){} string name; int id; }; struct Position{ Position():name("invalid position"),id(-1){} Position(const string& _name, int _id):name(_name),id(_id){} string name; int id; }; bool compareByName(const Person& person1, const Person& person2){ if(person1.lastName==person2.lastName){ return person1.firstName<person2.firstName; } return person1.lastName<person2.lastName; } class PersonsList{ public: void addPerson(const Person& person){ persons.push_back(person); } void addPosition(const Position& position){ positionsMap[position.id]=position; } void addJob(const Job& job){ jobsMap[job.id]=job; } void print(){ for(int i=0;i<(int)persons.size();i++){ Person& person=persons[i]; Job& job=jobsMap[person.job_id]; Position& position=positionsMap[person.position_id]; cout << setfill (' ') << std::setw (15) << person.lastName; cout << setfill (' ') << std::setw (10) << person.firstName; cout << setfill (' ') << std::setw (5) << person.age << " years"; cout << setfill (' ') << std::setw (20) << job.name; cout << setfill (' ') << std::setw (20) << position.name; cout << endl; } } void sortByName(){ stable_sort(persons.begin(),persons.end(),compareByName); } void sortByAge(){ // ================================================= TODO // programmer also want to change something else, not only this fucntion } void sortByJob(){ // ================================================= TODO } private: std::vector<Person> persons; std::map<int,Job> jobsMap; std::map<int,Position> positionsMap; }; int main() { PersonsList list; Job google("Google",1); Job microsoft("Microsoft",2); Job hp("Hewlett-Packard",3); list.addJob(google); list.addJob(microsoft); list.addJob(hp); Position junior("Junior developer",1); Position senior("Senior developer",2); Position manager("Manager",3); list.addPosition(junior); list.addPosition(senior); list.addPosition(manager); list.addPerson(Person("Ivanov","Ivan",21,google.id,junior.id)); list.addPerson(Person("Sidorov","Nikolay",28,google.id,senior.id)); list.addPerson(Person("Ivanov","Maxim",28,google.id,manager.id)); list.addPerson(Person("Volkova","Katerina",22,microsoft.id,junior.id)); list.addPerson(Person("Demidov","Vitaly",35,microsoft.id,manager.id)); list.addPerson(Person("Bodrov","Boris",40,hp.id,senior.id)); list.sortByName(); cout<<"Sorted by name:"<<endl; list.print(); cout<<endl; list.sortByAge(); cout<<"Sorted by age:"<<endl; list.print(); cout<<endl; list.sortByJob(); cout<<"Sorted by job:"<<endl; list.print(); return 0; }
рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХрд╛рд░реНрдп рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрдБрдЯрд╛рдИ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдирд╛рдо рд╕реЗред рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ std :: stabil_sort рдореЗрдВ, рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рддрддреНрд╡ рд▓реЗрддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдореЗрдердб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдЯрд┐рдХ рд╣реИред рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдХреЛрдб рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдФрд░ рдореИрдВ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдЬрд╛рдирдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдХреЗ рддрд╣рдд, рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рдиред
рдирд┐рд░реНрдгрдпрдореИрдВрдиреЗ рдПрдХ рд╕реНрдереИрддрд┐рдХ рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреЛ рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкрд░реНрд╕рдирд▓рд┐рд╕реНрдЯ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЧ рдореЗрдВ рд▓рдкреЗрдЯ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ред
bool compareByJobName(const Person& person1, const Person& person2, PersonsList* list){ Job& job1=list->getJobById(person1.job_id); Job& job2=list->getJobById(person2.job_id); return job1<job2; } class sorter { PersonsList* listPointer; public: sorter(PersonsList* _listPointer) : listPointer(_listPointer) {} bool operator()(const Person& person1, const Person& person2) const { return compareByJobName(person1, person2, listPointer ); } }; void PersonsList::sortByJob(){ stable_sort(persons.begin(),persons.end(),sorter(this)); }