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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Lookup  (Прочитано 10745 раз)
qt_user
Гость
« Ответ #15 : Март 13, 2012, 22:17 »

Небольшая разница между "имея элемент" и "имея (значение) цвета" позволяет обойтись без поиска вообще. А от мультимапы я балдею Улыбающийся Ну ладно, допустим даже "искать по цвету" - но тогда почему не lower_bound? На худой конец С-шный bsearch. Тот же логарифм но сортированный массив указателей куда дешевле чем любой ассоциативный контейнер.
мультимап как и мап реализованы на основе красно-черного бинарного дерева, которое само балансируется
по высоте, и исключается случай вырождения дерева в список, поэтому гарантировано логарифм при основе 2
Записан
twp
Гость
« Ответ #16 : Март 13, 2012, 23:23 »

мультимап как и мап реализованы на основе красно-черного бинарного дерева, которое само балансируется
по высоте, и исключается случай вырождения дерева в список, поэтому гарантировано логарифм при основе 2

Цитата: Assistant
The QMap class is a template class that provides a skip-list-based dictionary.
Записан
V1KT0P
Гость
« Ответ #17 : Март 13, 2012, 23:38 »

Добрый день

Есть контейнер элементы которого имеют какой-то атрибут, пусть цвет. Значение атрибута не уникально, напр в исходном контейнере 4 элемента с красным цветом, 2 с синим и.т.п.

Нужно: имея элемент быстро найти все с тем же цветом.  напр элемент красный - пробежаться по всем остальным красным. Исходный контейнер сортировать/изменять нельзя, создавать любые доп данные - можно.

Спасибо
Ну у меня в голове родился такой интересный костыль. Если тебе надо быстро пройтись по всем элементам но не критична скорость добавления/удаления новых элементов и не жалко продублировать данные то вот как можно замутить через-жопу:
QList<Элемент> - Список элементов.
QMap<Атрибут,*QList<Элемент> > - Вот здесь будем хранить дублированные данные.

Вот у нас есть элемент и нам надо пройтись по всем таким же элементам с таким же атрибутом. Типа псевдокод:
QList<Элемент> *список = QMap.value(Элемент.Атрибут);
Ну и дальше foreach список с проверкой на то что элемент не равняется первоначальному.

Ну и при вставке и удалении надо будет синхронизовать с QMap<Атрибут,*QList<Элемент> > но если этот контейнер и дополнительный вынести в отдельный класс то можно там все так красиво в обертку завернуть =).
Записан
qt_user
Гость
« Ответ #18 : Март 14, 2012, 10:40 »

The QMap class is a template class that provides a skip-list-based dictionary.

не очень понял что значит "skip-list-based dictionary", но вот что говорит вики:
Associative containers are designed to be especially efficient in accessing its elements by their key, as opposed to sequence containers which are more efficient in accessing elements by their position.[1] Associative containers are guaranteed to perform operations of insertion, deletion, and testing whether an element is in it, in logarithmic time - O(log n). As such, they are typically implemented using self-balancing binary search trees and support bidirectional iteration. Iterators and references are not invalidated by insert and erase operations, except for iterators and references to erased elements.
http://en.wikipedia.org/wiki/Associative_containers_(C%2B%2B)

self-balancing binary search tree - это и есть самобалансируещее красно-черное дерево
Записан
twp
Гость
« Ответ #19 : Март 14, 2012, 10:53 »

не очень понял что значит "skip-list-based dictionary", но вот что говорит вики:
На вики есть и про Skip list (Список с пропусками)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Март 14, 2012, 12:53 »

Желание вооружиться знаниями вполне нормально, но Вы можете думать сами?  Улыбающийся

Для задачи изложенной в теме - вообще не нужны никакие мапы и/или др ассоциативные контейнеры, проход вообще выполняется без поиска, за счет того что нужные данные просчитываются один раз и сохраняются в элементы. Это можно с тем же успехом делать и С массивами.

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


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