Spec-Zone.ru › Qt 5.15

Класс QMultiHash

шаблон <typename Key, typename T> class QMultiHash

Класс QMultiHash — это вспомогательный подкласс QHash, обеспечивающий хэширование с множественными значениями. Подробнее...

Заголовок: #include <QMultiHash>
qmake: QT += core
Наследует: QHash
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются перезаписываемыми.

Открытые функции

QMultiHash(const QHash<Key, T> &other)
QMultiHash(InputIterator begin, InputIterator end)
QMultiHash(std::initializer_list<std::pair<Key, T> > list)
QMultiHash()
typename QHash<Key, T>::const_iterator constFind(const Key &key, const T &value) const
bool contains(const Key &key, const T &value) const
int count(const Key &key, const T &value) const
typename QHash<Key, T>::iterator find(const Key &key, const T &value)
typename QHash<Key, T>::const_iterator find(const Key &key, const T &value) const
typename QHash<Key, T>::iterator insert(const Key &key, const T &value)
int remove(const Key &key, const T &value)
typename QHash<Key, T>::iterator replace(const Key &key, const T &value)
void swap(QMultiHash<K, V> &other)
QList<Key> uniqueKeys() const
QMultiHash<K, V> & unite(const QMultiHash<K, V> &other)
QList<T> values(const Key &key) const
QMultiHash<K, V> operator+(const QMultiHash<K, V> &other) const
QMultiHash<K, V> & operator+=(const QMultiHash<K, V> &other)

Связанные внешние члены

uint qHash(const QMultiHash<Key, T> &key, uint seed = 0)

Подробное описание

QMultiHash<Key, T> — один из универсальных классов контейнеров Qt. Он наследует QHash и расширяет его несколькими удобными функциями, которые делают его более подходящим, чем QHash, для хранения хэшей с множественными значениями. Хэш с множественными значениями — это хэш, который позволяет хранить несколько значений с одним ключом.

Поскольку QMultiHash наследует QHash, вся функциональность QHash также применима к QMultiHash. Например, вы можете использовать isEmpty() для проверки, пуст ли хэш, и вы можете перебирать QMultiHash, используя итераторы QHash (например, QHashIterator). Но в отличие от QHash, он предоставляет функцию insert(), которая позволит вставлять несколько элементов с одним ключом. Функция replace() соответствует QHash::insert(). Также предоставляются удобные операторы +() и +=().

В отличие от QMultiMap, QMultiHash не обеспечивает упорядочения вставленных элементов. Единственная гарантия состоит в том, что элементы с одинаковым ключом будут появляться последовательно, от последнего к первому вставленному значению.

Пример:

QMultiHash<QString, int> hash1, hash2, hash3;

hash1.insert("plenty", 100);
hash1.insert("plenty", 2000);
// hash1.size() == 2

hash2.insert("plenty", 5000);
// hash2.size() == 1

hash3 = hash1 + hash2;
// hash3.size() == 3

В отличие от QHash, QMultiHash не предоставляет оператор []. Используйте value() или replace(), если нужно получить доступ к последнему вставленному элементу с определенным ключом.

Если необходимо извлечь все значения для одного ключа, можно использовать values(const Key &key), которое возвращает QList<T>:

QList<int> values = hash.values("plenty");
for (int i = 0; i < values.size(); ++i)
    cout << values.at(i) << Qt::endl;

Элементы с одинаковым ключом доступны от последнего к первому вставленному.

Более эффективный подход заключается в вызове find() для получения итератора в стиле STL для первого элемента с ключом и переборе оттуда:

QMultiHash<QString, int>::iterator i = hash.find("plenty");
while (i != hash.end() && i.key() == "plenty") {
    cout << i.value() << Qt::endl;
    ++i;
}

Типы данных ключа и значения QMultiHash должны быть типами данных, допускающими присваивание. Например, нельзя хранить QWidget в качестве значения; вместо этого храните указатель QWidget*. Кроме того, тип ключа QMultiHash должен поддерживать оператор==(), а также в пространстве имен типа должна быть функция qHash(), возвращающая хеш-значение для аргумента типа ключа. Подробности см. в документации к QHash.

См. также QHash, QHashIterator, QMutableHashIterator и QMultiMap.

Документация по функциям-членам

QMultiHash::QMultiHash(const QHash<Key, T> &other)

Создает копию other (которая может быть QHash или QMultiHash).

См. также operator=().

шаблон <typename InputIterator> QMultiHash::QMultiHash(InputIterator begin, InputIterator end)

Создает многозначный хэш с копией каждого элемента в диапазоне итераторов [begin, end). Элементы, перебираемые с помощью диапазона, должны быть объектами с first и second членами данных (например, QPair, std::pair, и т. д.) конвертируемыми в Key и T соответственно; или у итераторов должны быть key() и value() члены функций, возвращающие ключ, конвертируемый в Key и значение, конвертируемое в T соответственно.

Эта функция была добавлена в Qt 5.14.

QMultiHash::QMultiHash(std::initializer_list<std::pair<Key, T> > list)

Создает многозначный хэш с копией каждого элемента в списке инициализации list.

Эта функция доступна только при компиляции программы в режиме C++11.

Эта функция была добавлена в Qt 5.1.

QMultiHash::QMultiHash()

Создаёт пустой хэш.

typename QHash<Key, T>::const_iterator QMultiHash::constFind(const Key &key, const T &value) const

Возвращает итератор, указывающий на элемент с key и value в хэше.

Если в хэше нет такого элемента, функция возвращает constEnd().

Эта функция была добавлена в Qt 4.3.

См. также QHash::constFind().

bool QMultiHash::contains(const Key &key, const T &value) const

Возвращает true , если хэш содержит элемент с key и value; в противном случае возвращает false.

Эта функция была добавлена в Qt 4.3.

См. также QHash::contains().

int QMultiHash::count(const Key &key, const T &value) const

Возвращает количество элементов с key и value.

Эта функция была добавлена в Qt 4.3.

См. также QHash::count().

typename QHash<Key, T>::iterator QMultiHash::find(const Key &key, const T &value)

Возвращает итератор, указывающий на элемент с заданным key и value. Если в хэше нет такого элемента, функция возвращает end().

Если в хэше есть несколько элементов с одинаковым key и value, возвращаемый итератор указывает на последний вставленный элемент.

Данная функция была добавлена в Qt 4.3.

См. также QHash::find().

typename QHash<Key, T>::const_iterator QMultiHash::find(const Key &key, const T &value) const

Это перегруженная функция.

Данная функция была добавлена в Qt 4.3.

typename QHash<Key, T>::iterator QMultiHash::insert(const Key &key, const T &value)

Вставляет новый элемент с заданным key и значением value.

Если в хэше уже есть элемент с таким же ключом, эта функция просто создаст новый. (Это поведение отличается от replace(), которая перезаписывает значение существующего элемента.)

См. также replace().

int QMultiHash::remove(const Key &key, const T &value)

Удаляет все элементы с заданным key и значением value из хэша. Возвращает количество удаленных элементов.

Данная функция была добавлена в Qt 4.3.

См. также QHash::remove().

typename QHash<Key, T>::iterator QMultiHash::replace(const Key &key, const T &value)

Вставляет новый элемент с заданным key и значением value.

Если в хэше уже есть элемент с таким же ключом, значение этого элемента заменяется на value.

Если есть несколько элементов с таким же ключом, значение последнего вставленного элемента заменяется на value.

См. также insert().

void QMultiHash::swap(QMultiHash<K, V> &other)

Меняет местами хэш other и текущий хэш. Эта операция очень быстрая и никогда не терпит неудачу.

Данная функция была добавлена в Qt 4.8.

QList<Key> QMultiHash::uniqueKeys() const

Возвращает список, содержащий все ключи в хэше. Ключи, которые встречаются несколько раз в хэше, появляются только один раз в возвращаемом списке.

Данная функция была добавлена в Qt 5.13.

См. также keys() и values().

QMultiHash<K, V> &QMultiHash::unite(const QMultiHash<K, V> &other)

Вставляет все элементы из хэша other в текущий хэш и возвращает ссылку на текущий хэш.

Данная функция была добавлена в Qt 5.13.

См. также insert().

QList<T> QMultiHash::values(const Key &key) const

Это перегруженная функция.

Возвращает список всех значений, связанных с заданным key, от последнего вставленного к первому.

См. также count() и insert().

QMultiHash<K, V> QMultiHash::operator+(const QMultiHash<K, V> &other) const

Возвращает хэш, содержащий все элементы из текущего хэша в дополнение ко всем элементам из other. Если ключ присутствует в обоих хэшах, результирующий хэш будет содержать ключ несколько раз.

См. также operator+=().

QMultiHash<K, V> &QMultiHash::operator+=(const QMultiHash<K, V> &other)

Вставляет все элементы из хэша other в текущий хэш и возвращает ссылку на текущий хэш.

См. также unite() и insert().

Связанные внеклассные функции

template <typename Key, typename T> uint qHash(const QMultiHash<Key, T> &key, uint seed = 0)

Возвращает хэш-значение для key, используя seed для инициализации вычисления.

Тип T должен поддерживаться функцией qHash().

Данная функция была добавлена в Qt 5.8.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qmultihash.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API