Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
#1

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

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

Есть класс:

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 11:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка вектора сложного класса (Просто для тех кто знает) (C++):

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

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

Метод для прохода по вектору сложного класса определения и удаления не нужных элементов - C++
Собственно неработающий метод: void OfficeTovarCollection::plusifneed(){ vector<OfficeTovar>:: iterator it1=begin(); ...

кто знает алгоритм для такого задания?? - C++
найти и упорядочить по алфавиту части света, процент площади лесного фонда от общего территории не превышает N. .... знайти і...

кто-нибудь знает где скачать русификатор для dev-c++? - C++
где можно скачать русификатор для dev-c++?

с рисунком для интеллектуалов кто знает как решит задачу на си?? - C++
Найдите в этом лабиринте такой маршрут, чтобы сумма всех "собранных " на перекрестках чисел равнялась 40. Через каждый перекресток можно...

10
soon
2545 / 1310 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.09.2012, 11:51 #2
Перегрузите операторы сравнения.
1
panicwassano
594 / 562 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
08.09.2012, 11:58 #3
перегрузить операторы сравнения, а для алгоритма сортировки написать функцию компаратор
0
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
08.09.2012, 12:44  [ТС] #4
Вот прямо сейчас перегружаю,
Цитата Сообщение от panicwassano Посмотреть сообщение
... написать функцию компаратор
а вот это не понял??
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 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
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
08.09.2012, 13:33  [ТС] #6
Перегрузил операторы, все получилось!
и без compare.
soon, - Спасибо.

Хотя все равно не понимаю зачем там compare и куда его совать, и механизм использования..?..
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 14:02 #7
Некоторые обобщённые сортировалки не умеют operator<, operator> и operator==, поэтому требуют вот таких функций, которые передаются внутрь них как аргумент.
0
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
08.09.2012, 14:38 #8
Цитата Сообщение от tihonya Посмотреть сообщение
Проблема заключается в том что сортировка из библиотеки алгоритмов не может сравнить экземпляры Date_class. (скорее всего)
Из личного опыта: перегрузка операторов это зло.

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

Цитата Сообщение от Invader_Zim Посмотреть сообщение
Перегрузка дает коду понятности +10 но требует от проггера память 20 и альфа рук 90 или 180
А память зачем?
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 16:18 #11
Цитата Сообщение от soon Посмотреть сообщение
А память зачем?
Чтобы помнить о побочных эффектах, навешенных на операторы, и правилах неявного приведения типов.
0
08.09.2012, 16:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 16:18
Привет! Вот еще темы с ответами:

Кто может написать методы класса поиск и сортировка? - C++
Всем добрый день Вот задание кто может помогите Создать приложение Windows Forms, которое реализует задание по варианту. Общие...

Для тех кто имеет опыт по ОПП - C++
Посмотрите на код и выскажете свое мнение, соответствует ли он философии ОПП, если нет то скажите в чем ошибки, как лучше и т.д. . Это...

Для тех кто делает оконные приложения в Builder C++ Borland - C++
Ребята вот подскажите..если я создал приложение , оно работает , все норм, но вот я хочу что бы там было несколько форм. как подключить к...

Класс итератора для класса вектора - C++
Необходимо реализовать собственный класс итератора для прохода по вектору, с перегрузкой оператора ++ - переход к следующему элементу и --...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru