Russian Qt Forum
Октябрь 01, 2024, 16:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: вставка элемента в QList с сортировкой  (Прочитано 4043 раз)
jasf
Гость
« : Ноябрь 22, 2009, 17:06 »

Здравствуйте. А как в QList вставить элемент автоматически с сортировкой (нечто, похожее на qSort и lessThan). не вызывать же qSort после каждого .append()а.. спасибо Улыбающийся
« Последнее редактирование: Ноябрь 22, 2009, 17:08 от jasf » Записан
MoPDoBoPoT
Гость
« Ответ #1 : Ноябрь 22, 2009, 17:32 »

Например воспользоваться утрированным методом дихотомии.
Предположим у нас в QList'е отсортированные числа по возрастанию и мы хотим добавить еще одно число. Сначала проверяем граничные условия:
-если добаляемый элемнт меньше либо равен прервому в списке -> добавляем в начало
-если добаляемый элемент больше либо равен последнему в списке -> добавляем в конец
Иначе находим середину списка (элемнт в середине списка=X) и определяем, к какому подсписку надо отнести добавляемый элемент (но прежде надо проверить на равенство добаляемого элемента и Х):
-если добаляемый элемнт меньше X, то "работаем" с левой частью
-если добаляемый элемнт больше X, то "работаем" с правой частью
и т.д.
Записан
Rcus
Гость
« Ответ #2 : Ноябрь 22, 2009, 17:39 »

RandomAccessIterator qBinaryFind ( RandomAccessIterator begin, RandomAccessIterator end, const T & value, LessThan lessThan )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Ноябрь 22, 2009, 17:47 »

Например воспользоваться утрированным методом дихотомии.
Почему "утрированным"? Улыбающийся По-моему это и есть поиск в сортированном массиве (log2N и все такое). Во всяком случае я всегда делаю именно так. Однако я сомневаюсь что Ваша рекомендация будет принята  - ведь тогда "надо что-то писать" (а не пользоваться готовым). и лучше задействовать N слонопотамов-контейнеров - но не "изобретать велосипед" Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 22, 2009, 17:56 »

RandomAccessIterator qBinaryFind ( RandomAccessIterator begin, RandomAccessIterator end, const T & value, LessThan lessThan )
Поправьте меня если неправ, но я вижу qBinaryFind делает то же что и bsearch
Цитировать
RandomAccessIterator qBinaryFind ( RandomAccessIteratorbegin, RandomAccessIteratorend, const T &value)
Performs a binary search of the range (begin,end) and returns the position of an occurrence ofvalue. If there are no occurrences of value, returns end.
А здесь добавляемый элемент может и не существовать в массиве
Записан
MoPDoBoPoT
Гость
« Ответ #5 : Ноябрь 22, 2009, 18:00 »

Не знаю  Улыбающийся Просто я этот метод вспомнил из "Методы вычислений" для поиска решения уравнения и думал что утрировал его, ввиду адаптации к данной задаче. Хотя, по сути, да, это и есть метод половинного деления. Ни дать ни взять, как говорится  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.165 секунд. Запросов: 22.