Как отсортировать 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);
//...
}
};
И зачем держать в векторе указатели, а не объекты, не понятно? Не забывайте в деструкторе класса удалять все объекты под указателями.