Spec-Zone.ru › Qt

Класс 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.

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

См. также replace и emplace.

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.

См. также begin() и cend().

[since 5.0] QMultiHash::const_iterator QMultiHash::cend() const

Возвращает итератор const в стиле STL, указывающий на мнимый элемент после последнего элемента в хэше.

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

См. также cbegin() и end().

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().

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

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.

См. также clear() и take().

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.

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

[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().

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

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

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

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

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

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

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

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

QMultiHash<Key, T> &QMultiHash::operator+=(const QMultiHash<Key, T> &other)

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

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

T &QMultiHash::operator[](const Key &key)

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

Если в хэше нет элемента с ключом key, функция вставляет в хэш значение по умолчанию с ключом key и возвращает ссылку на него.

Если в хэше есть несколько элементов с ключом key, функция возвращает ссылку на последнее вставленное значение.

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

Связанные Нечлен-функции

[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

Spec-Zone.ru

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