Создайте функтор для сравнения правильного поля, затем укажите функтор при сортировке:
struct by_age {
bool operator()(student const &a, student const &b) const {
return a.age < b.age;
}
};
struct by_name {
bool operator()(student const &a, student const &b) const {
return a.name < b.name;
}
};
// sort by age
std::sort(students.begin(), students.end(), by_age());
// sort by name
std::sort(students.begin(), students.end(), by_name());
Начиная с C ++ 11, вы можете использовать лямбда-выражение для сравнения "на месте", что-то вроде этого:
// sort by name:
std::sort(students.begin(), students.end(),
[](student const &a, student const &b) {
return a.name < b.name;
});
// sort by age:
std::sort(students.begin(), students.end(),
[](student const &a, student const &b) {
return a.age < b.age;
});