STL.Сортировка списка,состоящего из объектов класса.

С++ программирование

Есть список list<MyClass>lst,состоящий из множества объектов.
Есть класс:
class MyClass{
string s1;
string s2;
int i;
..............
};
При попытке применить к нему ф-цию lst.sort(); выдаёт кучу ошибок.
Можно ли применять сортировку для таких типов данных?Если можно,то что я забыл сделать?

Примечание:
Пробовал применить стандартный алгоритм сортировки из<algorithm>

sort(lst.begin(),lst.end());

такая же фигня.

Примечание:
kmike

Я тебя понял.Попробую.
И ещё вопрос.Есть перегруженная версия алгоритма sort,где третий параметр ф-ция сравнения.Впринципе,я могу написать сам такую ф-цию,а алгоритм её применит?Такая ф-ция должна быть членом класса или просто глобальная?

Примечание:
kmike

Да,компилятор пишет,что не знает оператор <.

Примечание:
kmike
Всё заработало:и с перегрузкой оператора<,и с ф-циями.Мне с ф-циями удобней,так как нужна сортировка по разным полям класса.
Спасибо.Очень помог.
Ответы:
Можно, следует перегрузить для этого класса операции сравнения. Алгоритму сортировки ведь как-то надо знать, какой элемент больше, а какой меньше.
да, функция - любая. Ну посмотреть по параметрам, вроде бы должна принимать объекты нужного класса и возвращать 0, -1 или 1. Если для сравнения ей потребуется доступ к protected полям - то или делать ее методом класса, или friend'ом
bool operator<(const MyClass& left, const MyClass& right)
{
return left.i < right.i;
}
не работает?
насчет подходов - слегка погорячился, функция - абсолютно нормальный способ, который лучше перегрузки оператора, если требуется нетривиальная сортировка. Оператор сравнения должен выполнять сравнение и ничего больше, мне так кажется. Просто если сортировка - какая-то простая и очевидная, с перегрузкой оператора как-то проще и логичнее выйдет.


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.