Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
1

Сортировка вектора сложного класса (Просто для тех кто знает)

08.09.2012, 11:45. Показов 1185. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть класс:

C++
1
2
3
4
5
6
7
8
9
class Tovar
{
protected:  
    Date_class expiry;
    string articul, name, catigory,barcode;
    double price;
public:
/*............................................*/
};
Date_class - это сложный класс даты с указателем на структуку tm, конструктор копирования в нем переопределен.

Как мне отсортировать вектор класса товар, например по articul, или по articul + barcode?

Проблема заключается в том что сортировка из библиотеки алгоритмов не может сравнить экземпляры Date_class. (скорее всего)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2012, 11:45
Ответы с готовыми решениями:

Процедуры в С++ (для тех, кто знает и Pascal, и C++)
Недавно начал учить С++ и столкнулся с такой вещью. Из того, что я понял, у С++ есть только...

Написать функцию для класса, возращающую данный из вектора обьектов класса по итератору вектора
День=добрый как написать функцию для класса возращающую данный из вектора обьектов класса по...

Для тех кто знает и паскаль и с++
у меня есть программа на с, нужно её на паскаль переписать, просто с этим языком я мало знаком, а...

Для тех, кто знает DBMS_SQL
Задача: обновить данные в табличке. Название таблички известно (например, test_1), а вот количество...

10
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.09.2012, 11:51 2
Перегрузите операторы сравнения.
1
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
08.09.2012, 11:58 3
перегрузить операторы сравнения, а для алгоритма сортировки написать функцию компаратор
0
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
08.09.2012, 12:44  [ТС] 4
Вот прямо сейчас перегружаю,
Цитата Сообщение от panicwassano Посмотреть сообщение
... написать функцию компаратор
а вот это не понял??
0
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 13:27 5
Цитата Сообщение от tihonya Посмотреть сообщение
а вот это не понял??
C++
1
2
3
4
5
6
int compare(const Class &one, const Class &two)
{
  // возвращает +1, если one < two
  //             0, если one = two
  //            -1, если one > two
}
0
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
08.09.2012, 13:33  [ТС] 6
Перегрузил операторы, все получилось!
и без compare.
soon, - Спасибо.

Хотя все равно не понимаю зачем там compare и куда его совать, и механизм использования..?..
0
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 14:02 7
Некоторые обобщённые сортировалки не умеют operator<, operator> и operator==, поэтому требуют вот таких функций, которые передаются внутрь них как аргумент.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
08.09.2012, 14:38 8
Цитата Сообщение от tihonya Посмотреть сообщение
Проблема заключается в том что сортировка из библиотеки алгоритмов не может сравнить экземпляры Date_class. (скорее всего)
Из личного опыта: перегрузка операторов это зло.

Лучше переопределить функцию сортировки для либы которой пользуетесь.
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
08.09.2012, 15:25 9
outoftime, Перегрузка дает коду понятности +10 но требует от проггера память 20 и альфа рук 90 или 180.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.09.2012, 16:12 10
Цитата Сообщение от outoftime Посмотреть сообщение
Из личного опыта: перегрузка операторов это зло.
М-да? Никогда не пользуйтесь std::cout << "Something". Зло должно понять, что с ним не желают иметь дела.

Цитата Сообщение от Invader_Zim Посмотреть сообщение
Перегрузка дает коду понятности +10 но требует от проггера память 20 и альфа рук 90 или 180
А память зачем?
0
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 16:18 11
Цитата Сообщение от soon Посмотреть сообщение
А память зачем?
Чтобы помнить о побочных эффектах, навешенных на операторы, и правилах неявного приведения типов.
0
08.09.2012, 16:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2012, 16:18
Помогаю со студенческими работами здесь

Для тех кто знает рогалики
Есть рогалики которые запускаются в окне (ADOM, DF), но графика, как в консоли ASCII-шная. Я...

Java FAQ: для тех кто знает (учил) С/С++
1. Строки сравниваются не при помощи оператора == а при помощи метода equals (&quot;a&quot; == &quot;a&quot;) == true...

для тех кто знает что такое МАН
решил написать в этом году МАН. Подскажите тему. Ну точнее хочу на МАН написать программу на винду,...

Для начинающих и просто тех кто любит программировать[Не актуально]
Просто у нас группа тех кому интересно программирование и компьютеры. Создаем проекты и коллективно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru