Класс QMultiHash
шаблон <typename Key, typename T> class 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) |
| qsizetype | remove(const Key &key, const T &value) |
| qsizetype | removeIf(Predicate pred) |
| 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) |
Связанные нечлены
| qsizetype | erase_if(QMultiHash<Key, T> &hash, Predicate pred) |
| size_t | qHash(const QMultiHash<Key, T> &key, size_t seed = 0) |
| QDataStream & | operator<<(QDataStream &out, const QMultiHash<Key, T> &hash) |
| QDataStream & | operator>>(QDataStream &in, QMultiHash<Key, T> &hash) |
Подробное описание
QMultiHash<Key, T> — один из обобщённых классов контейнеров Qt. Он наследует от QHash и расширяет его несколькими удобными функциями, которые делают его более подходящим, чем QHash, для хранения хешей с несколькими значениями. Хеш с несколькими значениями — это хеш, который позволяет хранить несколько значений с одним ключом.
QMultiHash в основном отражает API QHash. Например, вы можете использовать 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*() возвращает пару ключ/значение вместо значения.
Этот typedef был введен в 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*() возвращает пару ключ/значение вместо значения.
Этот typedef был введен в 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().
[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)
Удаляет все элементы с заданным key из хэша. Возвращает количество удаленных элементов.
См. также remove().
qsizetype QMultiHash::remove(const Key &key, const T &value)
Удаляет все элементы с заданным key и значением value из хэша. Возвращает количество удаленных элементов.
См. также remove().
[since 6.1] template <typename Predicate> qsizetype QMultiHash::removeIf(Predicate pred)
Удаляет все элементы, для которых предикат pred возвращает true, из множественного хэша.
Функция поддерживает предикаты, принимающие аргумент типа QMultiHash<Key, T>::iterator, или аргумент типа std::pair<const Key &, T &>.
Возвращает количество удаленных элементов, если таковые были.
Эта функция была добавлена в Qt 6.1.
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
Возвращает список, содержащий все ключи в отображении. Ключи, которые встречаются несколько раз в отображении, встречаются только один раз в возвращаемом списке.
END_OF_DOCUMENT_MARKERДанная функция была введена в Qt 5.13.
[since 5.13] QMultiHash<Key, T> &QMultiHash::unite(const QMultiHash<Key, T> &other)
Вставляет все элементы из хэша other в данный хэш и возвращает ссылку на этот хэш.
Данная функция была введена в Qt 5.13.
См. также insert().
[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 6.1] template <typename Key, typename T, typename Predicate> qsizetype erase_if(QMultiHash<Key, T> &hash, Predicate pred)
Удаляет все элементы, для которых предикат pred возвращает true, из множественного хэша hash.
Функция поддерживает предикаты, которые принимают аргумент типа QMultiHash<Key, T>::iterator, или аргумент типа std::pair<const Key &, T &>.
Возвращает количество удалённых элементов, если таковые имеются.
Данная функция была введена в Qt 6.1.
[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> QDataStream &operator<<(QDataStream &out, const QMultiHash<Key, T> &hash)
Записывает хэш hash в поток out.
Для этой функции требуются, чтобы типы ключа и значения реализовывали operator<<().
См. также Сериализация типов данных Qt.
template <typename Key, typename T> QDataStream &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.2/qmultihash.html