Функция-член std::list::sort()
перегружена.std::list
имеет обычную функцию-член, которая не принимает параметров и использует operator<
для сортировки элементов списка:
void sort();
Также имеется шаблон функции-члена, принимающий один параметр comp
, который используетсяв качестве предиката для сортировки элементов:
template<class Compare>
void sort(Compare comp);
Предполагается, что вы хотите отсортировать student
объекты в вашем списке по ключу id
в по возрастанию .Вы можете либо определить operator<
для своего пользовательского student
класса как:
bool operator<(student const& a, student const& b) {
return a.id < b.id;
}
и использовать перегрузку, которая не принимает параметров:
sList.sort(); // 1st overload
или просто добавить лямбдувыражение для шаблона функции-члена, принимающее один параметр:
auto cmp = [](auto const& a, auto const& b) {
return a.id < b.id;
};
sList.sort(cmp); // 2nd overload
при таком подходе вам не нужно определять operator<
для вашего student
класса.
Примечаниечто вы не можете использовать алгоритм std::sort()
на итераторах std::list
, поскольку для этого алгоритма требуются итераторы с произвольным доступом , но std::list
предоставляет только двунаправленные итераторы.Поэтому следующий код не будет компилироваться:
std::sort(sList.begin(), sList.end());
Вместо этого вы должны использовать функции-члены, предоставляемые std::list
, чтобы отсортировать элементы контейнера, как описано выше.