Название: вставка элемента в 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 Не знаю :) Просто я этот метод вспомнил из "Методы вычислений" для поиска решения уравнения и думал что утрировал его, ввиду адаптации к данной задаче. Хотя, по сути, да, это и есть метод половинного деления. Ни дать ни взять, как говорится :)
|