![]() |
|
Модераторы: bsa |
![]()
|
|
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Доброго времени суток!
В общем, имеется вектор, содержащий указатели на объекты различных классов. В программе я создаю эти объекты и помещаю в коллекцию. После этого мне необходимо их отсортировать функцией set(). Вот:
После просмотра коллекции ничего не происходит.Все объекты выводятся в том же порядке. В чем ошибка?Может вектор должен сортироваться не по указателям на объекты, а по самим объктам? |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 2 Всего: 37 |
удалил
Это сообщение отредактировал(а) Sartorius - 28.4.2010, 16:47 |
|||
|
||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Когда сортируешь свои объекты таким образом, надо ещё добавлять функциональный класс, в котором описываешь как сравниваются два объекта
|
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Можно небольшой примерчик функционального класса?
В моих классах имеется: в 1-м поле string и int во 2-м 2 поля string и int Кстати, у нас в лабе ничего о функциональном классе не сказано. Написано только, что при создании своей функции сортировки необходимо использовать функцию сравнения. Это сообщение отредактировал(а) m9yt - 28.4.2010, 16:56 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
пример Это сообщение отредактировал(а) azesmcar - 28.4.2010, 16:56 |
|||
|
||||
| lexa107 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Честно сказать, я не пробовал сравнивать разные классы, но вообще функциональный класс сравнения выглядит так:
где MyClass - это класс, объекты которого сравниваются, str - строка в этом классе Теперь надо sort делать следующим образом:
обогнали( Это сообщение отредактировал(а) lexa107 - 28.4.2010, 17:01 |
||||
|
|||||
| m9yt |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Н-дааа.пример конечно не очень наглядный.в его работе сложно разобраться. можно хотя бы эти std:: заменить? Добавлено через 1 минуту и 5 секунд
Твой пример мне намного понятней))) |
||||||||||
|
|||||||||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
пропиши в начале
using namespace std; и не надо будет std:: писать |
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Тогда еще вопрос.
Ведь у меня в классе не 1 поле.Если, например, в одном классе строка в первом поле больше, но в другом больше во втором поле, то как быть? И как сравнивать классы с вообще разным количеством полей? Это сообщение отредактировал(а) m9yt - 28.4.2010, 17:11 |
|||
|
||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Не обязательно писать
return a < b; можно проделать сначала любые другие действия: например, если надо сравнить по именам и фамилиям, но они записаны в разных строках, можно сложить их в одну, и уже тогда сравнивать. Простор тут не ограничен Добавлено через 2 минуты и 29 секунд Чтобы сравнить два разных класса, можно попробовать перегрузить оператор скобок на разные входные данные. Пример нужен? |
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Не помешает. |
|||
|
||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Я, конечно, так никогда не делал, но по идее должно работать
Возращаемое значение конечно же нужно отредактировать под свои классы |
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
А по какому полю сравнивать, зависит от меня?
Нельзя как-то сравнивать сразу по всем полям? |
|||
|
||||
| lexa107 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Да, ты это сам можешь выбрать
Если ты сможешь при этом выбрать, какой объект больше, то можешь попробовать |
||||
|
|||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
соответствнно, выдает ошибку error C2535: bool compare::operator ()(ID *,ID *): функция-член уже определена или объявлена ID*-указатель на абстрактный класс Это сообщение отредактировал(а) m9yt - 28.4.2010, 17:38 |
|||
|
||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Так это потому что ты при перегрузке функций передаёшь одни и те же параметры. Подожди, я сейчас попробую поправить твой код
|
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Надо как-то сделать, чтобы различные параметры передавались...
|
|||
|
||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
У тебя address и Email - это наследники одного класса ID. Так?
Где ты задаёшь поле id? |
|||
|
||||
| m9yt |
|
||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Опередил) Добавлено через 5 минут и 50 секунд
address наследник ID, а Email наследник address. поле id задаю
|
||||||||||||
|
|||||||||||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Попробуй просто написать:
Это сообщение отредактировал(а) lexa107 - 28.4.2010, 17:53 |
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
может так?
|
|||
|
||||
| lexa107 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Может и так прокатит |
||||
|
|||||
| m9yt |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Не катит...(( error C2664: bool compare::operator ()(address *,address *): невозможно преобразовать параметр 1 из 'ID *' в 'address *' |
||||||
|
|||||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Мой способ тоже никак?
Это сообщение отредактировал(а) lexa107 - 28.4.2010, 18:07 |
|||
|
||||
| m9yt |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Вот это прокатило!))) Сейчас объект сортируются по id в порядке возрастания, независимо от типа класса! Думаю, мы добились нужного? |
||||
|
|||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
Тебе видней, добились или нет
|
|||
|
||||
| m9yt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Спасибо тебе. У меня впереди сортировка слиянием.Если что, напишу в личку) |
|||
|
||||
| lexa107 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 25.4.2010 Где: Минск Репутация: нет Всего: нет |
удалил
Это сообщение отредактировал(а) lexa107 - 28.4.2010, 18:28 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |