<algorithm>
использует operator <
, а не operator >
.
поэтому ваш класс стал (const
фиксированным):
class Student
{
private:
int age;
string name;
public:
Student(){}
~Student() {}
friend istream & operator >> (istream& in, Student & a);
friend ostream & operator << (ostream& out, const Student & a);
bool operator < (const Student& rhs) const
{
return std::tie(age, name) < std::tie(rhs.age, rhs.name);
}
};
Предикат должен иметь подпись, «совместимую» с bool cmp(const Student&, const Student&)
, ваша функция cmp
не соответствует.
Чтобы отсортировать в порядке убывания, вам просто нужно сделать:
std::sort(students.begin(), students.end(), std::greater<>{});
Для возрастания:
std::sort(students.begin(), students.end());