Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
void PersonsList::compareByJobName( const Person& person1, const Person& person2 )
{
Job& job1=getJobById(person1.job_id);
Job& job2=getJobById(person2.job_id);
return job1<job2;
}
void PersonsList::sortByJob(){
stable_sort(persons.begin(),persons.end(), boost::bind(&PersonsList::compareByJobName, this, _1, _2));
}
bool PersonsList::compareByJobName( const Person& person1, const Person& person2 )
bool PersonsList::compareByJobName( const Person& person1, const Person& person2 )
{
Job& job1=getJobById(person1.job_id);
Job& job2=getJobById(person2.job_id);
return job1<job2;
}
void PersonsList::sortByJob(){
using namespace std::placeholders;
stable_sort(persons.begin(),persons.end(), std::bind(&PersonsList::compareByJobName, this, _1, _2));
}
Под windows же поднять буст и парвильно настроить — нетривиальная задача
class CompareByJobName: public std::binary_function<Person, Person, bool>{
std::map<int, Job> &jobsMap;
public:
CompareByJobName(std::map<int, Job> &_jobsMap): jobMap(_jobMap){};
inline bool operator()(const Person& person1, const Person& person2){
if(person1.job_id==person2.job_id){
if(person1.lastName==person2.lastName){
return person1.firstName<person2.firstName;
}else return person1.lastName<person2.lastName;
}
return jobsMap[person1.job_id] < jobsMap[person2.job_id] ;
}
}
std::stable_sort(persons.begin(),persons.end(),CompareByJobName(jobsMap) );
Тестовое задание C++, функтор для сортировки