![]() |
|
![]() ![]() ![]() |
|
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Нужно отсортировать элементы в TList. Знаю что есть функция Sort, но не пойму как она работает. В списке предполагаются целые числа.
Может быть посоветуете и другой путь решения задачи? Мне нужен некий контейнер, который бы хранил целые числа, очень хорошо если бы этот контейнер умел убивать дупликаты, в крайнем случае умел сортировать... желательно контейнер из классов билдера, вот я остановился пока на TList, пусть он не убивает дупликаты, но хотя бы сортирует. |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Нитонисе, чем STL не подходит:
|
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Наверное подходит, просто я с контейнерами STL раньше не работал, мне просто удобнее работать с классами билдера.
|
|||
|
||||
mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
работает достаточно просто. Необходимо указатель на функцию сравнения. Вот здесь начинается самое интересное - заканчивается гламурный быдлокодинг (как бэ) и начинаем уже чуточку мыслить. Подход на самом деле стандартный.
как заметил камрад SenkraD контейнеры из STL достаточно кошерный выход. |
||||
|
|||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
mrbrooks, вы тоже используете инструментарий С++. Я вобщем-то не могу себя причислить к спецам, потому использую приемы программирования на своем низком уровне. Признаю что ваши решения эффективнее, но мне с этим просто нужно разбираться)) Не могли бы вы более понятно расписать (прокомментировать) вот этот пример, заменив сортировку по алфавиту, на сортировку чисел.
Это сообщение отредактировал(а) Нитонисе - 11.11.2009, 13:09 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
камрад. То что ты привел и я - это одно и тоже. Что моя функция MyCompare, что твоя CompareNames возвращает int, в случае когда Item1 > Item2 = 1 Item1 == Item2 = 0 Item1 < Item2 = -1 В своем коде для чисел я описывал все это сам, в приведенном тобой для строк - это все успешно заменяет функция CompareText. Вот и все. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
mrbrooks, значит если нет стандартной функции сравнения чисел, то нужно ее написать. Я так понял что ты ее и написал, просто мне не совсем понятен код. Но эта функция должна возвращать одно из трех значений: -1,0,1. Так?
|
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
да. Вы вообще читали документацию к TList::Sort?
|
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Что из хелпа смог перевести, то и прочитал. Меня просто смутила функция CompareText. Ее в примере использовали, но она нигде не объявлена. Стало быть какая-то стандартная функция и теперь все более менее понятно. Надо сделать функцию сравнения чисел. |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
у мя щас под рукой Builder нет, но помойму тут предельно ясно написано,
что нуно сделать и как
|
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
SenkraD, хм, такое я не видел, может плохо искал.
А в функцию сравнения передаются указатели void, может можно туда передовать указатели типа int, если я int сравниваю? |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
нет - иначе сигнатура не подойдёт (вернее без каста не подойдёт).
Это сообщение отредактировал(а) SenkraD - 11.11.2009, 14:15 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
очень даже возможно.
в какую? в том примере, где строки сравниваются ![]() Добавлено через 2 минуты и 34 секунды хорошая мысль. |
|||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вот такая функция сравнения
И вот так инициализируется сортировка
|
||||
|
|||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Почему-то сортировка работает некорректно.
Результат в Memo "2,0,6,0,5,4". Почему сортировка прошла некорректно? |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
потому что компаратор не правильный!!! - мой косяк - в той статье ошибка
нуно так
|
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Не совсем так. Переделал.
Хотя смысл static_cast<int*> не совсем понимаю)) |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Нитонисе, смысл в том что ты явно указываеш каст + этот каст,
в отличии от С-стайл каста, может уведомить об ошибке на этапе компиляции + повышается читабельность кода |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |