![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 18.07.2009
Сообщений: 3
|
![]()
Здравствуйте!
Столкнулся с такой проблемой при сортировке списка. %-) Есть структура: Код:
Код:
1) Имени сцены "SceneAlias" 2) Аттрибутам текстуры TexMipMap;TexGray;TexJpeg; 3) По размерам текстуры TexWidth; TexHeight; ЭТО НЕ ОЗНАЧЕТ СДЕЛАТЬ 3 РАЗНЫХ СОРТИРОВКИ!!! ЭТО ЗНАЧИТ ЧТОБЫ СВЕРХУ ВНИХ ОБЪЕКТЫ БЫЛИ ОТСОРТИРОВАННЫ ПО ДАННЫМ КРИТЕРИЯМ! Т.е. 1) Scene1 JPEG MIPMAP GRAY 1000x900 2) Scene1 JPEG MIPMAP GRAY 800x900 3) Scene1 JPEG MIPMAP 1000x900 4) Scene1 JPEG MIPMAP 700x700 5) Scene1 JPEG GRAY 1500x1500 6) Scene1 JPEG GRAY 700x700 7) Scene1 JPEG 2000x700 8) Scene1 JPEG 1000x700 8 ) Scene1 100x100 9 ) Scene1 100x50 10) Scene2 ....... Т.е. номера пунктов 3-ех аттрибутов являются как бы приоритетами (важностью) 1) 2) 3) НО ПРОБЛЕМА НЕ В ТОМ КАК ОТСОРТИРОВАТЬ!!!!!! Проблема заключается в том что функция PREDICATE для списка LIST отказывается сортировать корректно его элементы! Вот один из испробованных мною вариантов PREDICATE функции (до этого я пытался делать эту функцию разными способами в том числе перегрузкой скобок () и перегрузкой знака ">" ) Код:
1) Переменные bool sortmem_apartscenes и bool sortmem_apartjpeg являются глобальными. Увы от них избавится не вышло а добавлять еще 3 варианта сортировки было бы некрасиво. Перед сортировкой эти переменные устанавливаются в нужное значение. 2) Переменные TexJpeg TexMipMap и TexGray пробывал сравнивать знаком > но все равно безрезультатно. 3) bool result - это якобы варинт написания функции как в Дельфи. Просто во время отладки я заметил очень странную весчь. Оказывается в PREDICATE функции при к примеру "return true" не происходит выход из функции а продолжает обрабатывать всею последующие команды =-O Я не понимать что это за баг? 4) Если проверять по отдельности то разделив на 3-и блока всю функцию сортировки - мы получим что 1-ый блок с сортировкой по алфавиту, не выполняется (хотя список элементов string успешно сортирует имена файлов но только в другом участке в другом контейнере в моей работе) - 2 блок кода выполняется только отдельно к примеру только сортировка по JPEG аттрибуту. - 3 блок сортироки по размерам блестяще выполняется. ПРИТОМ! Если по всем 3 блокам одновременно я пытаюсь сортировать данный список то у меня получается что 1) По именам сцен сортирует но имена сцен и без того изначально были уже в отсортированном виде еще при добавлении в список элементов (отсортировать в обратном порядке при изменении знака > на знак < ничего не меняется но если блок убрать то порядок теряется) 2) Также сортирует по именьшению сверху вниз размеров текстур. Аттрибуты же текстур остаются в произвольном порядке.... ![]() Как это можно вылечить. Может кто уже сталкивался со сложными сортировками? |
![]() |
![]() |
![]() |
#2 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
Во-первых: сделайте конструктор по умолчанию, который будет инициализировать все поля структуры. Так поиск будет корректнее. Во вторых - все можно реализовать в одной функции - перегрузке оператора ">". Главное - придумать алгоритм сравнения.
|
![]() |
![]() |
![]() |
#3 | |
Регистрация: 18.07.2009
Сообщений: 3
|
![]() Цитата:
Так собственно самый нижний отрывок кода это и есть функция которая является условием сортировки. Т.е. алгоритм сравнения уже имеется но работает както некорректно. Вы предлагаете перегрузить символ "<" но чем это собственно будет отличатся от того что имеется или от к примеру испробованной перегрузки символов () в функции greater<> |
|
![]() |
![]() |
![]() |
#4 | |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
![]()
А зачем вам перегружать круглые скобки?
Цитата:
Ваша "испробованная" перегрузка нигде не написана, следовательно чем она отличается от моей я сказать не могу. |
|
![]() |
![]() |
![]() |
#5 | |
Регистрация: 18.07.2009
Сообщений: 3
|
![]()
Тем не менее это все не так важно. А ошибка была найдена на rsdn.ru
Вот цитата: Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
STL обращение к элементу list | sht0p0r | Общие вопросы C/C++ | 1 | 05.07.2009 21:22 |
STL Сортировка | ammaximus | Общие вопросы C/C++ | 0 | 25.06.2009 07:04 |
Помогите с списком(list,STL,C++) | Alex1991 | Помощь студентам | 7 | 18.05.2009 21:36 |
Проконсультируйте пожалуйста насчет списков(list,C++,STL) | Olya90 | Помощь студентам | 1 | 14.05.2009 19:30 |
Сортировка в STL | xz121 | Общие вопросы C/C++ | 3 | 09.06.2008 19:30 |