| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > operator= и sort |
| Автор: Luyan 24.10.2012, 17:51 | ||||||
| Допустим есть структура data с двумя полями a и b. Оператор = перегружен таким образом, чтобы изменялось только поле a. Проблема следующая: я хочу отсортировать вектор объектов по полю b с помощью std::sort, но оператор = у меня перегружен.
получаю
а хотелось бы вот так:
Как это сделать с таким образом реализованным оператором=? ///// Как я понимаю std::sort использует swap и мне эту фунцкию надо перегрузить для объектов моего типа. Вот как это сделать? |
| Автор: Result 24.10.2012, 21:00 |
| Похоже что нет 100% гарантии что std::sort использует swap http://liveworkspace.org/code/d3083717bb6b11417c1fd67f078f2033 |
| Автор: xvr 25.10.2012, 13:37 |
Никак. Ваш оператор = не отвечает семантике копирования. У вас после присваивания получается помесь состояния оригинального и копируемого объекта. Алгоритмы из stl с такими объектами работать не обязанны. |
| Автор: Luyan 25.10.2012, 15:50 |
| ясно, пришлось перегружать для создания "помеси" другой оператор. |
| Автор: NoviceF 28.10.2012, 10:21 | ||
В одной книжечке под авторством "Саттер, Александреску" видел рекомендацию в похожих случаях добавлять отдельную именованную функцию, вместо перегрузки какого-либо оператора. |