Класс QMultiHash
шаблон <typename Key, typename T> класс QMultiHashКласс QMultiHash — это удобный подкласс QHash, предоставляющий хэши с множественными значениями. Подробнее...
| Заголовок: | #include <QMultiHash> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются многопоточными.
Типы
| класс | const_iterator |
| класс | iterator |
| класс | key_iterator |
| const_key_value_iterator | |
| key_value_iterator |
Общедоступные функции
| QMultiHash(const QHash<Key, T> &other) | |
| QMultiHash(InputIterator begin, InputIterator end) | |
| QMultiHash(std::initializer_list<std::pair<Key, T> > list) | |
| QMultiHash() | |
| QMultiHash::iterator | begin() |
| QMultiHash::const_iterator | begin() const |
| QMultiHash::const_iterator | cbegin() const |
| QMultiHash::const_iterator | cend() const |
| void | clear() |
| QMultiHash::const_iterator | constBegin() const |
| QMultiHash::const_iterator | constEnd() const |
| QMultiHash::const_iterator | constFind(const Key &key, const T &value) const |
| QMultiHash::const_key_value_iterator | constKeyValueBegin() const |
| QMultiHash::const_key_value_iterator | constKeyValueEnd() const |
| bool | contains(const Key &key, const T &value) const |
| qsizetype | count(const Key &key, const T &value) const |
| QMultiHash::iterator | emplace(const Key &key, Args &&... args) |
| QMultiHash::iterator | emplace(Key &&key, Args &&... args) |
| QMultiHash::iterator | emplaceReplace(const Key &key, Args &&... args) |
| QMultiHash::iterator | emplaceReplace(Key &&key, Args &&... args) |
| QMultiHash::iterator | end() |
| QMultiHash::const_iterator | end() const |
| QPair<QMultiHash::iterator, QMultiHash::iterator> | equal_range(const Key &key) |
| QPair<QMultiHash::const_iterator, QMultiHash::const_iterator> | equal_range(const Key &key) const |
| QMultiHash::iterator | find(const Key &key, const T &value) |
| QMultiHash::const_iterator | find(const Key &key, const T &value) const |
| QMultiHash::iterator | insert(const Key &key, const T &value) |
| Key | key(const T &value, const Key &defaultKey = Key()) const |
| QMultiHash::key_iterator | keyBegin() const |
| QMultiHash::key_iterator | keyEnd() const |
| QMultiHash::key_value_iterator | keyValueBegin() |
| QMultiHash::const_key_value_iterator | keyValueBegin() const |
| QMultiHash::key_value_iterator | keyValueEnd() |
| QMultiHash::const_key_value_iterator | keyValueEnd() const |
| QList<Key> | keys() const |
| qsizetype | remove(const Key &key, const T &value) |
| QMultiHash::iterator | replace(const Key &key, const T &value) |
| void | swap(QMultiHash<Key, T> &other) |
| T | take(const Key &key) |
| QList<Key> | uniqueKeys() const |
| QMultiHash<Key, T> & | unite(const QMultiHash<Key, T> &other) |
| QMultiHash<Key, T> & | unite(const QHash<Key, T> &other) |
| T | value(const Key &key, const T &defaultValue = T()) const |
| QList<T> | values() const |
| QList<T> | values(const Key &key) const |
| QMultiHash<Key, T> | operator+(const QMultiHash<Key, T> &other) const |
| QMultiHash<Key, T> & | operator+=(const QMultiHash<Key, T> &other) |
| T & | operator[](const Key &key) |
Связанные нечленные функции
| size_t | qHash(const QMultiHash<Key, T> &key, size_t seed = 0) |
| QDataStreamIfHasOStreamOperators<Key, T> | operator<<(QDataStream &out, const QMultiHash<Key, T> &hash) |
| QDataStreamIfHasIStreamOperators<Key, T> | operator>>(QDataStream &in, QMultiHash<Key, T> &hash) |
Подробное описание
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.
Документация по типам членов
[since 5.10] QMultiHash::const_key_value_iterator
Тип QMap::const_key_value_iterator предоставляет итератор по типу const в стиле STL для QMultiHash и QMultiHash.
QMultiHash::const_key_value_iterator по существу идентичен QMultiHash::const_iterator с тем отличием, что operator*() возвращает пару ключ/значение вместо значения.
Этот тип данных был добавлен в Qt 5.10.
См. также QKeyValueIterator.
[since 5.10] QMultiHash::key_value_iterator
Тип QMap::key_value_iterator предоставляет итератор в стиле STL для QMultiHash и QMultiHash.
QMultiHash::key_value_iterator по существу идентичен QMultiHash::iterator с тем отличием, что operator*() возвращает пару ключ/значение вместо значения.
Этот тип данных был добавлен в Qt 5.10.
См. также QKeyValueIterator.
Документация по функциям-членам
template <typename Args> QMultiHash::iterator QMultiHash::emplaceReplace(Key &&key, Args &&... args)
template <typename Args> QMultiHash::iterator QMultiHash::emplaceReplace(const Key &key, Args &&... args)
Вставляет новый элемент в контейнер. Этот новый элемент создается на месте с использованием args в качестве аргументов для его создания.
Если в хэше уже есть элемент с тем же ключом, значение этого элемента заменяется значением, созданным из args.
Возвращает итератор, указывающий на новый элемент.
template <typename Args> QMultiHash::iterator QMultiHash::emplace(Key &&key, Args &&... args)
template <typename Args> QMultiHash::iterator QMultiHash::emplace(const Key &key, Args &&... args)
Вставляет новый элемент в контейнер. Этот новый элемент создается на месте с использованием args в качестве аргументов для его создания.
Если в хэше уже есть элемент с тем же ключом, эта функция просто создаст новый. (Это поведение отличается от replace(), которое перезаписывает значение существующего элемента.)
Возвращает итератор, указывающий на новый элемент.
См. также insert.
QMultiHash::QMultiHash(const QHash<Key, T> &other)
Создает копию other (которая может быть QHash или QMultiHash).
[since 5.14] template <typename InputIterator> QMultiHash::QMultiHash(InputIterator begin, InputIterator end)
Создает многозначный хэш с копией каждого элемента в диапазоне итераторов [begin, end). Элементы, перебираемые с помощью диапазона, должны быть объектами с first и second членами данных (например, QPair, std::pair, и т. д.), преобразуемыми в Key и T соответственно; или итераторы должны иметь key() и value() функции-члены, возвращающие ключ, преобразуемый в Key и значение, преобразуемое в T соответственно.
Эта функция была добавлена в Qt 5.14.
[since 5.1] QMultiHash::QMultiHash(std::initializer_list<std::pair<Key, T> > list)
Создает многозначный хэш с копией каждого элемента в списке инициализации list.
Эта функция доступна только при компиляции программы в режиме C++11.
Эта функция была добавлена в Qt 5.1.
QMultiHash::QMultiHash()
Создаёт пустой хэш.
QMultiHash::iterator QMultiHash::begin()
Возвращает итератор в стиле STL, указывающий на первый элемент в хэше.
См. также constBegin() и end().
QMultiHash::const_iterator QMultiHash::begin() const
Это перегруженная функция.
[since 5.0] QMultiHash::const_iterator QMultiHash::cbegin() const
Возвращает итератор const в стиле STL, указывающий на первый элемент в хэше.
Эта функция была добавлена в Qt 5.0.
[since 5.0] QMultiHash::const_iterator QMultiHash::cend() const
Возвращает итератор const в стиле STL, указывающий на воображаемый элемент после последнего элемента в хэше.
Эта функция была добавлена в Qt 5.0.
void QMultiHash::clear()
Удаляет все элементы из хэша и освобождает используемую им память.
См. также remove().
QMultiHash::const_iterator QMultiHash::constBegin() const
Возвращает итератор const в стиле STL, указывающий на первый элемент в хэше.
См. также begin() и constEnd().
QMultiHash::const_iterator QMultiHash::constEnd() const
Возвращает итератор const в стиле STL, указывающий на воображаемый элемент после последнего элемента в хэше.
См. также constBegin() и end().
QMultiHash::const_iterator QMultiHash::constFind(const Key &key, const T &value) const
Возвращает итератор, указывающий на элемент с key и value в хэше.
Если в хэше нет такого элемента, функция возвращает constEnd().
[since 5.10] QMultiHash::const_key_value_iterator QMultiHash::constKeyValueBegin() const
Возвращает итератор const в стиле STL, указывающий на первый элемент в хэше.
Эта функция была добавлена в Qt 5.10.
См. также keyValueBegin().
END_OF_DOCUMENT_MARKER
[since 5.10] QMultiHash::const_key_value_iterator QMultiHash::constKeyValueEnd() const
Возвращает константный итератор STL, указывающий на воображаемую запись после последней записи в хеше.
Эта функция была добавлена в Qt 5.10.
См. также constKeyValueBegin().
bool QMultiHash::contains(const Key &key, const T &value) const
Возвращает true , если хеш содержит элемент с заданным key и value; в противном случае возвращает false.
См. также contains().
qsizetype QMultiHash::count(const Key &key, const T &value) const
Возвращает количество элементов с заданным key и value.
См. также count().
QMultiHash::iterator QMultiHash::end()
Возвращает итератор STL, указывающий на воображаемый элемент после последнего элемента в хеше.
См. также begin() и constEnd().
QMultiHash::const_iterator QMultiHash::end() const
Это перегруженная функция.
[since 5.7] QPair<QMultiHash::iterator, QMultiHash::iterator> QMultiHash::equal_range(const Key &key)
Возвращает пару итераторов, определяющих диапазон значений [first, second), хранящихся под ключом key. Если диапазон пуст, оба итератора будут равны end().
Эта функция была добавлена в Qt 5.7.
[since 5.7] QPair<QMultiHash::const_iterator, QMultiHash::const_iterator> QMultiHash::equal_range(const Key &key) const
Это перегруженная функция.
Эта функция была добавлена в Qt 5.7.
QMultiHash::iterator QMultiHash::find(const Key &key, const T &value)
Возвращает итератор, указывающий на элемент с заданным key и value. Если в хеше нет такого элемента, функция возвращает end().
Если в хеше несколько элементов с одинаковым key и value, возвращаемый итератор указывает на последний вставленный элемент.
QMultiHash::const_iterator QMultiHash::find(const Key &key, const T &value) const
Это перегруженная функция.
QMultiHash::iterator QMultiHash::insert(const Key &key, const T &value)
Вставляет новый элемент с заданным key и значением value.
Если в хеше уже есть элемент с таким же ключом, эта функция просто создаст новый. (Это поведение отличается от replace(), которое перезаписывает значение существующего элемента.)
См. также replace().
Key QMultiHash::key(const T &value, const Key &defaultKey = Key()) const
Возвращает первый ключ, сопоставленный с value, или defaultKey, если в хеше нет элемента, сопоставленного с value.
Эта функция может быть медленной (линейное время), потому что внутренняя структура данных QMultiHash оптимизирована для быстрого поиска по ключу, а не по значению.
[since 5.6] QMultiHash::key_iterator QMultiHash::keyBegin() const
Возвращает константный итератор STL, указывающий на первый ключ в хеше.
Эта функция была добавлена в Qt 5.6.
См. также keyEnd().
[since 5.6] QMultiHash::key_iterator QMultiHash::keyEnd() const
Возвращает константный итератор STL, указывающий на воображаемый элемент после последнего ключа в хеше.
Эта функция была добавлена в Qt 5.6.
См. также keyBegin().
[since 5.10] QMultiHash::key_value_iterator QMultiHash::keyValueBegin()
Возвращает итератор STL, указывающий на первую запись в хеше.
Эта функция была добавлена в Qt 5.10.
См. также keyValueEnd().
[since 5.10] QMultiHash::const_key_value_iterator QMultiHash::keyValueBegin() const
Возвращает константный итератор STL, указывающий на первую запись в хеше.
Эта функция была добавлена в Qt 5.10.
См. также keyValueEnd().
[since 5.10] QMultiHash::key_value_iterator QMultiHash::keyValueEnd()
Возвращает итератор STL, указывающий на воображаемую запись после последней записи в хеше.
Эта функция была добавлена в Qt 5.10.
См. также keyValueBegin().
[since 5.10] QMultiHash::const_key_value_iterator QMultiHash::keyValueEnd() const
Возвращает константный итератор STL, указывающий на воображаемую запись после последней записи в хеше.
Эта функция была добавлена в Qt 5.10.
См. также keyValueBegin().
QList<Key> QMultiHash::keys() const
Возвращает список, содержащий все ключи в хеше в произвольном порядке. Ключи, встречающиеся несколько раз в хеше, также встречаются несколько раз в списке.
Порядок гарантируется, что он такой же, как и у values().
Эта функция создаёт новый список за линейное время. Время и использование памяти, связанные с этим, можно избежать, итерируя от keyBegin() до keyEnd().
qsizetype QMultiHash::remove(const Key &key, const T &value)
Удаляет все элементы, у которых есть key и значение value из хеша. Возвращает количество удалённых элементов.
См. также remove().
QMultiHash::iterator QMultiHash::replace(const Key &key, const T &value)
Вставляет новый элемент с заданным key и значением value.
Если уже есть элемент с key, значение этого элемента заменяется на value.
Если есть несколько элементов с key, значение последнего вставленного элемента заменяется на value.
См. также insert().
void QMultiHash::swap(QMultiHash<Key, T> &other)
Меняет местами хеш other с этим хешем. Эта операция очень быстрая и никогда не терпит неудачу.
T QMultiHash::take(const Key &key)
Удаляет элемент с key из хеша и возвращает связанное с ним значение.
Если элемент не существует в хеше, функция просто возвращает значение по умолчанию. Если в хеше есть несколько элементов с key, удаляется только последний вставленный.
Если вам не нужно значение возврата, remove() более эффективна.
См. также remove().
[since 5.13] QList<Key> QMultiHash::uniqueKeys() const
Возвращает список, содержащий все ключи в хеше. Ключи, встречающиеся несколько раз в хеше, встречаются только один раз в возвращённом списке.
Эта функция была добавлена в Qt 5.13.
[since 5.13] QMultiHash<Key, T> &QMultiHash::unite(const QMultiHash<Key, T> &other)
Вставляет все элементы из хеша other в этот хеш и возвращает ссылку на этот хеш.
Эта функция была добавлена в Qt 5.13.
См. также insert().
END_OF_DOCUMENT_MARKER
[since 6.0] QMultiHash<Key, T> &QMultiHash::unite(const QHash<Key, T> &other)
Вставляет все элементы из хеш-таблицы other в эту хеш-таблицу и возвращает ссылку на эту хеш-таблицу.
Эта функция была добавлена в Qt 6.0.
См. также insert().
T QMultiHash::value(const Key &key, const T &defaultValue = T()) const
Это перегруженная функция.
Возвращает значение, связанное с ключом key.
Если в хеш-таблице нет элемента с ключом key, функция возвращает defaultValue, которое является значением по умолчанию, если параметр не указан.
Если в хеш-таблице несколько элементов с ключом key, возвращается значение наиболее недавно вставленного.
QList<T> QMultiHash::values() const
Возвращает список, содержащий все значения в хеш-таблице в произвольном порядке. Если ключ связан с несколькими значениями, все эти значения будут в списке, а не только последнее вставленное.
Порядок гарантированно такой же, как и в keys().
Эта функция создаёт новый список за линейное время. Это время и потребление памяти можно избежать, перебирая значения от keyValueBegin() до keyValueEnd().
QList<T> QMultiHash::values(const Key &key) const
Это перегруженная функция.
Возвращает список всех значений, связанных с ключом key, от последнего добавленного до первого.
QMultiHash<Key, T> QMultiHash::operator+(const QMultiHash<Key, T> &other) const
Возвращает хеш-таблицу, содержащую все элементы этой хеш-таблицы плюс все элементы other. Если ключ встречается в обеих хеш-таблицах, в результате он будет присутствовать несколько раз.
См. также operator+=().
QMultiHash<Key, T> &QMultiHash::operator+=(const QMultiHash<Key, T> &other)
Вставляет все элементы из хеш-таблицы other в эту хеш-таблицу и возвращает ссылку на эту хеш-таблицу.
T &QMultiHash::operator[](const Key &key)
Возвращает значение, связанное с ключом key, как изменяемую ссылку.
Если в хеш-таблице нет элемента с ключом key, функция вставляет значение по умолчанию в хеш-таблицу с ключом key и возвращает ссылку на него.
Если в хеш-таблице несколько элементов с ключом key, эта функция возвращает ссылку на последнее вставленное значение.
Связанные нечлен-функции
[since 5.8] template <typename Key, typename T> size_t qHash(const QMultiHash<Key, T> &key, size_t seed = 0)
Возвращает значение хеш-функции для ключа key, используя seed для инициализации вычисления.
Тип T должен поддерживаться qHash().
Эта функция была добавлена в Qt 5.8.
template <typename Key, typename T> QDataStreamIfHasOStreamOperators<Key, T> operator<<(QDataStream &out, const QMultiHash<Key, T> &hash)
Записывает хеш-таблицу hash в поток out.
Для этой функции требуется, чтобы типы ключа и значения реализовывали operator<<().
См. также Сериализация типов данных Qt.
template <typename Key, typename T> QDataStreamIfHasIStreamOperators<Key, T> operator>>(QDataStream &in, QMultiHash<Key, T> &hash)
Читает хеш-таблицу из потока in в hash.
Для этой функции требуется, чтобы типы ключа и значения реализовывали operator>>().
См. также Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qmultihash.html