Как отсортировать vector указателей на объекты пользовательского класса

У меня есть класс Student, у которого есть параметр st_name, содержащий имя студента, которое присваивается во время объявления класса. Как я могу отсортировать список vector, который содержит экземпляры этих классов, используя имена студентов?

class Student {
private:
    string st_name;
public:
    Student(string name) {
        this->st_name = name;
    }
    string getName() {
        return st_name;
    }
};

class Example {
public:
    vector<Student*> students;

    void test() {
        students.push_back(new Student("Jolin"));
        students.push_back(new Student("Alan"));
        students.push_back(new Student("Kevin"));
        //TODO
    }
};

Ответы (1 шт):

Автор решения: AR Hovsepyan

Лишний раз не копируйте строку:

class Student {
private:
    string st_name;
public:
    Student(const string& name) 
        : st_name(name) { }
    string getName()  const{
        return st_name;
    }
};

class Example {
    //функция сравнения
    static bool cmp(Student* p1, Student* p2)
    {
        return p1->getName() < p2->getName();
    }
public:
    vector<Student*> students;
    void test() {
        students.push_back(new Student("Jolin"));
        students.push_back(new Student("Alan"));
        students.push_back(new Student("Kevin"));
        //сортировка стандартным алгоритмом
        std::sort(students.begin(), students.end(), cmp);
        //...
    }
};

И зачем держать в векторе указатели, а не объекты, не понятно? Не забывайте в деструкторе класса удалять все объекты под указателями.

→ Ссылка