Хэши QHash<K,T> и QMultiHash<K,T>

   
На этом шаге рассмотрим хэши QHash<K,T> и QMultiHash<K,T>.

   
Функциональность хэшей очень похожа на словарь QMap<K,T>, с той лишь разницей, что вместо сортировки по ключу этот класс использует хэш-таблицу. Это позволяет ему осуществлять поиск ключевых значений гораздо быстрее, чем это делает словарь QMap<K,T>.

   
Так же, как и в случае со словарем QMap<K,T>, следует соблюдать осторожность при использовании оператора индексации [], т. к. задание ключа, для которого элемент не существует, приведет к тому, что элемент будет создан. Поэтому важно проверять существование элемента, привязанного к ключу при помощи метода contains() контейнера.

   
Если вы намереваетесь разместить в хэш QHash<K,T> объекты собственных классов, то вам необходимо будет реализовать оператор сравнения == и специализированную функцию qHash() для вашего класса. Вот пример реализации оператора сравнения:

inline bool operator==(const MyClass& mc1, const MyClass& mc2)
{
   return (mc1.firstName() == mc2.firstName()
   && mc1.secondName() == mc2.secondName()
   );
}

   
Функция qHash() должна возвращать число, которое должно быть уникальным для каждого находящегося в хэше элемента. Например:

inline uint qHash(const MyClass& mc)
{
   return qHash(mc.firstName()) ^ qHash(mc.secondName());
}

   
Класс QMultiHash<K,T> унаследован от QHash<K,T>. Он позволяет размещать значения с одинаковыми ключами и, в целом, похож на QMultiMap<K,T>, но учитывает специфику своего родительского класса. Методы, присущие только для этих контейнеров, указаны в табл. 1.

Таблица 1. Некоторые методы контейнеров QHash<K,T> и QMultiHash<K,T>

Метод Описание
capacity() Возвращает размер хэш-таблицы
reserve() Задает размер хэш-таблицы
squeeze() Уменьшает объем внутренней хэш-таблицы для уменьшения используемого объема памяти

   
На следующем шаге рассмотрим множество QSet<T>.

Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий