Russian Qt Forum

Qt => Общие вопросы => Тема начата: jasf от Ноябрь 22, 2009, 17:06



Название: вставка элемента в QList с сортировкой
Отправлено: jasf от Ноябрь 22, 2009, 17:06
Здравствуйте. А как в QList вставить элемент автоматически с сортировкой (нечто, похожее на qSort и lessThan). не вызывать же qSort после каждого .append()а.. спасибо :)


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


Название: Re: вставка элемента в QList с сортировкой
Отправлено: Rcus от Ноябрь 22, 2009, 17:39
RandomAccessIterator qBinaryFind ( RandomAccessIterator begin, RandomAccessIterator end, const T & value, LessThan lessThan )


Название: Re: вставка элемента в QList с сортировкой
Отправлено: Igors от Ноябрь 22, 2009, 17:47
Например воспользоваться утрированным методом дихотомии.
Почему "утрированным"? :) По-моему это и есть поиск в сортированном массиве (log2N и все такое). Во всяком случае я всегда делаю именно так. Однако я сомневаюсь что Ваша рекомендация будет принята  - ведь тогда "надо что-то писать" (а не пользоваться готовым). и лучше задействовать N слонопотамов-контейнеров - но не "изобретать велосипед" :)


Название: Re: вставка элемента в QList с сортировкой
Отправлено: Igors от Ноябрь 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.
А здесь добавляемый элемент может и не существовать в массиве


Название: Re: вставка элемента в QList с сортировкой
Отправлено: MoPDoBoPoT от Ноябрь 22, 2009, 18:00
Не знаю  :) Просто я этот метод вспомнил из "Методы вычислений" для поиска решения уравнения и думал что утрировал его, ввиду адаптации к данной задаче. Хотя, по сути, да, это и есть метод половинного деления. Ни дать ни взять, как говорится  :)