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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qhash?  (Прочитано 12561 раз)
Soulq
Гость
« Ответ #15 : Май 18, 2011, 17:31 »

в ассистенте все есть  Подмигивающий
Код:
// Here's an example QSet with QString values:

 QSet<QString> set;
// To insert a value into the set, use insert():

 set.insert("one");
 set.insert("three");
 set.insert("seven");
// Another way to insert items into the set is to use operator<<():
 set << "twelve" << "fifteen" << "nineteen";
// To test whether an item belongs to the set or not, use contains():

 if (!set.contains("ninety-nine"))
Да-да я уже разобрался, еще раз спасибо.
 
Записан
Soulq
Гость
« Ответ #16 : Май 20, 2011, 08:38 »

А какая скорость поиска элемента у qset?
Записан
twp
Гость
« Ответ #17 : Май 20, 2011, 11:16 »

http://doc.qt.nokia.com/latest/containers.html#algorithmic-complexity
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Май 20, 2011, 12:01 »

А какая скорость поиска элемента у qset?
Не так уж много понятно из этой ссылки Улыбающийся Наверное лучше ответить своими словами, напр: qset(qhash) предназначен/заточен для быстрой вставки/поиска. Как он это делает - совсем непросто и разбираться можно долго, но во всяком случае это те классы что нужны.
Записан
twp
Гость
« Ответ #19 : Май 20, 2011, 12:10 »

Думаю предпочтительней, в первую очередь дать почитать первоисточник, тогда многие вопросы могут отпасть сами собой. Кроме того сравнительная таблица может дать больше инфы для размышления Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Май 20, 2011, 12:28 »

Думаю предпочтительней, в первую очередь дать почитать первоисточник, тогда многие вопросы могут отпасть сами собой. Кроме того сравнительная таблица может дать больше инфы для размышления Улыбающийся
Реально первая очередь будет и последней, а до размышлений дело не дойдет. Просто получена новая порция поверхностных знаний - вот и все. Понимаю что не нужно (да и невозможно) вникать во все до мелочей, многое надо просто использовать - это нормально. Но все же иногда интересно "а как же работает напр тот же QHash". Я открывал исходники но понял далеко не все.  Если можете объяснить принципиальный алгоритм на котором построен QHash - буду благодарен.
Записан
Fat-Zer
Гость
« Ответ #21 : Май 20, 2011, 12:32 »

Реально первая очередь будет и последней, а до размышлений дело не дойдет. Просто получена новая порция поверхностных знаний - вот и все. Понимаю что не нужно (да и невозможно) вникать во все до мелочей, многое надо просто использовать - это нормально. Но все же иногда интересно "а как же работает напр тот же QHash". Я открывал исходники но понял далеко не все.  Если можете объяснить принципиальный алгоритм на котором построен QHash - буду благодарен.
всегда считал, что и там, и в QSet обычная хеш-таблица... или я не прав?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Май 20, 2011, 12:37 »

всегда считал, что и там, и в QSet обычная хеш-таблица... или я не прав?
Понятно что QSet сводится к тому же QHash. Понятно для чего нужен хеш и как его использовать. Я спрашиваю как он устроен. Ну напр. std::set - красно-черное дерево, поиск - спуск, вставка - балансировка. А здесь как?
Записан
Fat-Zer
Гость
« Ответ #23 : Май 20, 2011, 12:45 »

Понятно что QSet сводится к тому же QHash. Понятно для чего нужен хеш и как его использовать. Я спрашиваю как он устроен. Ну напр. std::set - красно-черное дерево, поиск - спуск, вставка - балансировка. А здесь как?
большой массив, qHash вычисляет индекс в этом массиве, в котором должен хранится элемент. остаётся два вопроса:
1) что делать, если для нескольких элементов одинаковый индекс ака коллизии
2) когда расширять табицу
в общем тыц
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Май 20, 2011, 13:25 »

большой массив, qHash вычисляет индекс в этом массиве, в котором должен хранится элемент. остаётся два вопроса:
1) что делать, если для нескольких элементов одинаковый индекс ака коллизии
2) когда расширять табицу
в общем тыц
А что собственно "тыц"?  Улыбающийся Это из той же оперы что и предыдущая ссылка - хороша чтобы иметь общее понятие, но не более того. Кто такой "большой массив"? Что. если я вставил 2 ключа напр 1 и 10000, так уже 10К элементов полетели? Вряд ли, слишком тупо. Также популярный/практический вопрос - а почему итератор хеша не выдает элементы в отсортированном порядке (в отличие от QMap)?
Записан
Soulq
Гость
« Ответ #25 : Май 20, 2011, 13:37 »

Вроде почитал сет ищет за логарифм Улыбающийся
Записан
Fat-Zer
Гость
« Ответ #26 : Май 20, 2011, 14:57 »

Кто такой "большой массив"?
обычный массив, алоцированный в хипе или список не очень больших массивов... это детали реализации... там хоть std::vector хоть QList может быть бекэндом... на самом деле используется обычный массив в хипе...
Что. если я вставил 2 ключа напр 1 и 10000, так уже 10К элементов полетели?
нет, хеш функция потом берётся по модулю количества значений в массиве.
Вряд ли, слишком тупо. Также популярный/практический вопрос - а почему итератор хеша не выдает элементы в отсортированном порядке (в отличие от QMap)?
очевидно - значения в хеш таблице хранятся по другому порядку (значения хеш функции % размер массива)
Вроде почитал сет ищет за логарифм Улыбающийся
кто-то вас обманывает... QSet - ищет за о(1) в лучшем случае, и за о(n) в худшем... а вот std::set за лагорифм, ибо иснован на деревьях...
Записан
twp
Гость
« Ответ #27 : Май 20, 2011, 19:18 »

Кому интересно вот описание реализации основных контейнеров Qt.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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