本页内容

QMultiHash Class

template <typename Key, typename T> class QMultiHash

QMultiHash 类提供了一个多值哈希表。更多内容...

头文件: #include <QMultiHash>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入的。

QMultiHash 比较

类别可比较类型
相等性QMultiHash

公共类型

公共函数

QMultiHash()
QMultiHash(const QHash<Key, T> &other)
QMultiHash(std::initializer_list<std::pair<Key, T>> list)
QMultiHash(InputIterator begin, InputIterator end)
(since 6.4) auto asKeyValueRange() &&
(since 6.4) auto asKeyValueRange() &
(since 6.4) auto asKeyValueRange() const &&
(since 6.4) auto asKeyValueRange() const &
QMultiHash<Key, T>::iterator begin()
QMultiHash<Key, T>::const_iterator begin() const
QMultiHash<Key, T>::const_iterator cbegin() const
QMultiHash<Key, T>::const_iterator cend() const
void clear()
QMultiHash<Key, T>::const_iterator constBegin() const
QMultiHash<Key, T>::const_iterator constEnd() const
QMultiHash<Key, T>::const_iterator constFind(const Key &key, const T &value) const
QMultiHash<Key, T>::const_key_value_iterator constKeyValueBegin() const
QMultiHash<Key, T>::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<Key, T>::iterator emplace(Key &&key, Args &&... args)
QMultiHash<Key, T>::iterator emplace(const Key &key, Args &&... args)
QMultiHash<Key, T>::iterator emplaceReplace(Key &&key, Args &&... args)
QMultiHash<Key, T>::iterator emplaceReplace(const Key &key, Args &&... args)
QMultiHash<Key, T>::iterator end()
QMultiHash<Key, T>::const_iterator end() const
std::pair<QMultiHash<Key, T>::iterator, QMultiHash<Key, T>::iterator> equal_range(const Key &key)
std::pair<QMultiHash<Key, T>::const_iterator, QMultiHash<Key, T>::const_iterator> equal_range(const Key &key) const
QMultiHash<Key, T>::iterator erase(QMultiHash<Key, T>::const_iterator pos)
QMultiHash<Key, T>::iterator find(const Key &key, const T &value)
QMultiHash<Key, T>::const_iterator find(const Key &key, const T &value) const
QMultiHash<Key, T>::iterator insert(const Key &key, const T &value)
(since 6.11) QMultiHash<Key, T>::iterator insert(Key &&key, T &&value)
(since 6.11) QMultiHash<Key, T>::iterator insert(Key &&key, const T &value)
(since 6.11) QMultiHash<Key, T>::iterator insert(const Key &key, T &&value)
Key key(const T &value) const
Key key(const T &value, const Key &defaultKey) const
QMultiHash<Key, T>::key_iterator keyBegin() const
QMultiHash<Key, T>::key_iterator keyEnd() const
QMultiHash<Key, T>::key_value_iterator keyValueBegin()
QMultiHash<Key, T>::const_key_value_iterator keyValueBegin() const
QMultiHash<Key, T>::key_value_iterator keyValueEnd()
QMultiHash<Key, T>::const_key_value_iterator keyValueEnd() const
QList<Key> keys() const
qsizetype remove(const Key &key)
qsizetype remove(const Key &key, const T &value)
(since 6.1) qsizetype removeIf(Predicate pred)
QMultiHash<Key, T>::iterator replace(const Key &key, const T &value)
void swap(QMultiHash<Key, T> &other)
T take(const Key &key)
QList<Key> uniqueKeys() const
(since 6.0) QMultiHash<Key, T> &unite(const QHash<Key, T> &other)
QMultiHash<Key, T> &unite(const QMultiHash<Key, T> &other)
T value(const Key &key) const
T value(const Key &key, const T &defaultValue) 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)
(since 6.1) qsizetype erase_if(QMultiHash<Key, T> &hash, Predicate pred)
size_t qHash(const QMultiHash<Key, T> &key, size_t seed = 0)
bool operator!=(const QMultiHash<Key, T> &lhs, const QMultiHash<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMultiHash<Key, T> &hash)
bool operator==(const QMultiHash<Key, T> &lhs, const QMultiHash<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QMultiHash<Key, T> &hash)

详细说明

QMultiHash<KEY, T> 是 Qt 的泛型容器类之一,其中Key 是用于查找键的类型,T 是映射值的类型。它提供了一个哈希表,允许同一键对应多个值。

QMultiHash 基本上与QHash 的 API 一致。例如,您可以使用 isEmpty() 来测试哈希表是否为空,并且可以使用QHash 的迭代器类(例如QHashIterator )遍历 QMultiHash。 但与QHash 不同,它提供了insert()函数,允许插入多个具有相同键的项。replace()函数对应于QHash::insert()。它还提供了便捷的operator+()和operator+=()运算符。

与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 不提供 operator[]。若要访问具有特定键的最新插入项,请使用value() 或replace()。

若要检索单个键的所有值,可使用 values(const Key &key),该函数返回一个QList<T>:

QList<int> values = hash.values("plenty");
for (auto i : std::as_const(values))
    cout << i << endl;

具有相同键的项按插入时间从最近到最远排序。

更高效的方法是调用 `find()` 获取具有该键的第一个项的 STL 风格迭代器,然后从该项开始迭代:

auto i = hash.constFind("plenty");
while (i != hash.cend() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

QMultiHash 的键和值数据类型必须是可赋值的数据类型。 例如,您不能将QWidget 作为值存储;而应存储QWidget *。此外,QMultiHash的键类型必须提供operator==(),并且该类型的命名空间中必须存在qHash()函数,该函数会针对键类型的参数返回一个哈希值。详情请参阅QHash 文档。

另请参阅 QHash 、QHashIterator 、QMutableHashIterator 以及QMultiMap 。

成员类型文档

QMultiHash::const_key_value_iterator

typedef 定义的 QMultiHash::const_key_value_iterator 为QMultiHash 提供了一个 STL 风格的 const 迭代器。

QMultiHash::const_key_value_iterator 与QMultiHash::const_iterator 本质上相同,区别在于 operator*() 返回键/值对而非单个值。

另请参阅 QKeyValueIterator 。

QMultiHash::key_value_iterator

typedef QMultiHash::key_value_iterator 为 `QMultiHash` 提供了一个 STL 风格的迭代器。

QMultiHash::key_value_iterator 与QMultiHash::iterator 本质上相同,区别在于 operator*() 返回键值对而非单个值。

另请参阅 QKeyValueIterator 。

成员函数文档

[noexcept default] QMultiHash::QMultiHash()

创建一个空哈希表。

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

创建other 的副本(该对象可以是QHash 或QMultiHash)。

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

使用初始化列表list 中的每个元素的副本构建一个多哈希。

template <typename InputIterator> QMultiHash::QMultiHash(InputIterator begin, InputIterator end)

构建一个多哈希,其中包含迭代器范围 [begin,end) 中每个元素的副本。 要么该范围所遍历的元素必须是具有first 和second 数据成员(如std::pair )的对象,且分别可转换为Key 和T ;要么迭代器必须具有key() 和value() 成员函数,分别返回可转换为Key 的键和可转换为T 的值。

[since 6.4] auto QMultiHash::asKeyValueRange() &&

[since 6.4] auto QMultiHash::asKeyValueRange() &

[since 6.4] auto QMultiHash::asKeyValueRange() const &&

[since 6.4] auto QMultiHash::asKeyValueRange() const &

返回一个范围对象,允许以键值对的形式遍历该哈希表。例如,该范围对象可与结构化绑定声明结合,用于基于范围的 for 循环中:

QMultiHash<QString, int> hash;
hash.insert("January", 1);
hash.insert("February", 2);
// ...
hash.insert("December", 12);

for (auto [key, value] : hash.asKeyValueRange()) {
    cout << qPrintable(key) << ": " << value << endl;
    --value; // convert to JS month indexing
}

请注意,通过此方式获得的键和值都是对哈希中相应项的引用。具体来说,修改该值将直接修改哈希本身。

警告: 当下次对哈希调用非 const 函数,或者哈希被销毁时,返回的 迭代器/引用将被视为失效。

这些函数在 Qt 6.4 中引入。

另请参阅 QKeyValueIterator 。

QMultiHash<Key, T>::iterator QMultiHash::begin()

返回一个指向哈希表中第一个元素的STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或哈希表被销毁时,所返回的 迭代器/引用应被视为失效。

另请参阅 constBegin() 和end()。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::begin() const

警告: 当您下次对哈希表调用非 const 函数,或者当哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

这是一个重载函数。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::cbegin() const

返回一个指向哈希表中第一个元素的常量STL 风格迭代器。

警告: 当您下次对哈希表调用非 const 函数,或者当哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 begin() 和cend()。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::cend() const

返回一个指向哈希表中最后一个元素之后的“虚拟”元素的常量STL 风格迭代器。

警告: 当您下次对哈希表调用非 const 函数,或哈希表被销毁时,所返回的 迭代器/引用将被视为失效。

另请参阅 cbegin() 和end()。

[noexcept(...)] void QMultiHash::clear()

从哈希表中移除所有项目,并释放其占用的所有内存。

注意: 当std::is_nothrow_destructible<Node>::value 的值等于true 时,该 函数为noexcept。

另请参阅 remove()。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::constBegin() const

返回一个指向哈希表中第一个元素的常量STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 begin() 和constEnd()。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::constEnd() const

返回一个指向哈希表中最后一个元素之后的虚拟元素的 constSTL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 constBegin() 和end()。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::constFind(const Key &key, const T &value) const

返回一个迭代器,该迭代器指向哈希表中具有key 和value 的项。

如果哈希中不存在此类项,则该函数返回 `constEnd()`。

警告: 当下次对哈希调用非 const 函数,或者哈希被销毁时,返回的 迭代器/引用应被视为无效。

[noexcept] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::constKeyValueBegin() const

返回一个指向哈希表中第一个条目的常量STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 keyValueBegin()。

[noexcept] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::constKeyValueEnd() const

返回一个指向哈希表中最后一个条目之后虚构条目的常量STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用将被视为失效。

另请参阅 constKeyValueBegin()。

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

如果哈希中包含一个具有key 和value 的项,则返回true ;否则返回false 。

另请参阅 count()。

[noexcept] qsizetype QMultiHash::count(const Key &key, const T &value) const

返回符合key 和value 条件的项目数量。

另请参阅 contains()。

template <typename... Args> QMultiHash<Key, T>::iterator QMultiHash::emplace(Key &&key, Args &&... args)

template <typename... Args> QMultiHash<Key, T>::iterator QMultiHash::emplace(const Key &key, Args &&... args)

将一个新元素插入容器中。该新元素使用args 作为构造参数,在原地进行构造。

如果哈希中已经存在一个具有相同键的项,该函数将直接创建一个新的项。(此行为与replace() 不同,后者会覆盖现有项的值。)

返回一个指向新元素的迭代器。

警告: 当下次对哈希调用非 const 函数时,或当哈希被销毁时,返回的 迭代器/引用应被视为失效。

另请参阅 insert 。

template <typename... Args> QMultiHash<Key, T>::iterator QMultiHash::emplaceReplace(Key &&key, Args &&... args)

template <typename... Args> QMultiHash<Key, T>::iterator QMultiHash::emplaceReplace(const Key &key, Args &&... args)

将一个新元素插入容器中。该新元素使用args 作为构造参数,就地进行构造。

如果哈希表中已经存在一个具有相同键的项,则该项的值将被替换为由 `args` 构造的值。

返回一个指向新元素的迭代器。

警告:返回的 迭代器/引用在下次对哈希调用非 const 函数时,或当哈希被销毁时,应被视为失效。

另请参阅 replace 和emplace 。

[noexcept] QMultiHash<Key, T>::iterator QMultiHash::end()

返回一个STL 风格的迭代器,该迭代器指向哈希表中最后一个元素之后的虚拟元素。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 begin() 和constEnd()。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::end() const

这是一个重载函数。

std::pair<QMultiHash<Key, T>::iterator, QMultiHash<Key, T>::iterator> QMultiHash::equal_range(const Key &key)

返回一对迭代器,它们界定了值范围[first, second) ,这些值存储在key 中。如果该范围为空,则两个迭代器都将等于end()。

警告: 当下次对哈希调用非 const 函数时,或者当哈希被销毁时,返回的 迭代器/引用应被视为已失效。

[noexcept] std::pair<QMultiHash<Key, T>::const_iterator, QMultiHash<Key, T>::const_iterator> QMultiHash::equal_range(const Key &key) const

警告: 当您下次在哈希上调用非 const 函数时,或者当哈希被销毁时,返回的 迭代器/引用应被视为已失效。

这是一个重载函数。

QMultiHash<Key, T>::iterator QMultiHash::erase(QMultiHash<Key, T>::const_iterator pos)

从哈希表中移除与迭代器 `pos ` 关联的 (键, 值) 对,并返回指向哈希表中下一个项的迭代器。

此函数绝不会导致QMultiHash 对其内部数据结构进行重新哈希。这意味着在迭代过程中可以安全地调用它,且不会影响哈希中项的顺序。例如:

QMultiHash<QObject *, int> objectHash;
//...
QMultiHash<QObject *, int>::iterator i = objectHash.find(obj);
while (i != objectHash.end() && i.key() == obj) {
    if (i.value() == 0) {
        i = objectHash.erase(i);
    } else {
        ++i;
    }
}

警告: 当下次对哈希调用非 const 函数,或哈希被销毁时,所返回的 迭代器/引用应被视为失效。

另请参阅 remove()、take() 和find()。

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

返回一个指向具有key 和value 的项的迭代器。如果哈希中不存在此类项,则该函数返回end()。

如果哈希表中包含多个具有key 和value 的项,则返回的迭代器将指向最近插入的项。

警告: 当下次对哈希调用非 const 函数,或哈希被销毁时,返回的 迭代器/引用应被视为失效。

[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::find(const Key &key, const T &value) const

警告: 当您下次对哈希表调用非 const 函数,或者当哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

这是一个重载函数。

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

插入一个新项,其键为key ,值为value 。

如果哈希表中已有键为replace 的项,该函数将直接创建一个新项。(此行为与 ()不同,后者会覆盖现有项的值。)

QMultiHash 允许重复键。插入已存在的键时,会添加一个新条目,而不是覆盖原有条目。QMultHash 中项的顺序不作保证。

返回一个指向新元素的迭代器。

警告: 当下次对哈希调用非 const 函数,或哈希被销毁时,返回的 迭代器/引用应被视为失效。

另请参阅 replace()。

[since 6.11] QMultiHash<Key, T>::iterator QMultiHash::insert(Key &&key, T &&value)

[since 6.11] QMultiHash<Key, T>::iterator QMultiHash::insert(Key &&key, const T &value)

[since 6.11] QMultiHash<Key, T>::iterator QMultiHash::insert(const Key &key, T &&value)

这些函数是在 Qt 6.11 中引入的。

[noexcept] Key QMultiHash::key(const T &value) const

[noexcept] Key QMultiHash::key(const T &value, const Key &defaultKey) const

返回第一个映射到value 的键。如果哈希表中不存在映射到value 的项,则返回defaultKey ;若未提供此参数,则返回默认构造的键。

此函数可能运行较慢(线性时间),因为QMultiHash 的内部数据结构是为根据键快速查找而优化的,而非根据值查找。

[noexcept] QMultiHash<Key, T>::key_iterator QMultiHash::keyBegin() const

返回一个指向哈希表中第一个键的常量STL 风格迭代器。

警告: 当您下次对哈希表调用非 const 函数,或者哈希表被销毁时,所返回的 迭代器/引用应被视为已失效。

另请参阅 ` keyEnd()`。

[noexcept] QMultiHash<Key, T>::key_iterator QMultiHash::keyEnd() const

返回一个指向哈希表中最后一个键之后的虚拟项的常量STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 keyBegin()。

[noexcept] QMultiHash<Key, T>::key_value_iterator QMultiHash::keyValueBegin()

返回一个指向哈希表中第一个条目的STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 keyValueEnd()。

[noexcept] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::keyValueBegin() const

返回一个指向哈希表中第一个条目的常量STL 风格迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,应将返回的 迭代器/引用视为已失效。

另请参阅 keyValueEnd()。

[noexcept] QMultiHash<Key, T>::key_value_iterator QMultiHash::keyValueEnd()

返回一个STL 风格的迭代器,该迭代器指向哈希表中最后一个条目之后的虚构条目。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,应将返回的 迭代器/引用视为已失效。

另请参阅 keyValueBegin()。

[noexcept] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::keyValueEnd() const

返回一个指向哈希表中最后一个条目之后那个虚构条目的、STL 风格的const迭代器。

警告: 当下次对哈希表调用非 const 函数,或者哈希表被销毁时,返回的 迭代器/引用应被视为已失效。

另请参阅 keyValueBegin()。

QList<Key> QMultiHash::keys() const

返回一个列表,其中包含哈希表中的所有键,顺序不固定。在哈希表中出现多次的键,在列表中也会出现多次。

该列表的排序顺序保证与values() 函数所使用的排序顺序一致。

该函数以线性时间复杂度创建一个新列表。通过将keyBegin() 转换为keyEnd() 进行迭代,可以避免由此产生的时间和内存开销。

另请参阅 values() 和key()。

qsizetype QMultiHash::remove(const Key &key)

从哈希中移除所有具有key 的项。返回被移除的项的数量。

另请参阅 remove(const Key &key, const T &value)。

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<Key, T>::iterator QMultiHash::replace(const Key &key, const T &value)

插入一个新条目,其键为key ,值为value 。

如果已经存在key 的项,则该项的值将被替换为value 。

如果存在多个键为 `key` 的项,则将最近插入的项的值替换为 `value`。

返回一个指向新元素或已更新元素的迭代器。

警告: 当您下次在哈希上调用非 const 函数时,或者当哈希被销毁时,返回的 迭代器/引用应被视为失效。

另请参阅 insert()。

[noexcept] void QMultiHash::swap(QMultiHash<Key, T> &other)

将此多哈希与other 进行交换。该操作速度非常快,且绝不会失败。

T QMultiHash::take(const Key &key)

从哈希表中移除键为 `key ` 的项,并返回与其关联的值。

如果该项在哈希中不存在,则该函数仅返回一个通过默认构造生成的值。如果哈希中存在多个key 项,则仅移除最近插入的那一个。

若不使用返回值,则使用 `remove()` 效率更高。

另请参阅 remove()。

QList<Key> QMultiHash::uniqueKeys() const

返回一个包含映射中所有键的列表。在映射中出现多次的键,在返回的列表中仅出现一次。

另请参阅 keys() 和values()。

[since 6.0] QMultiHash<Key, T> &QMultiHash::unite(const QHash<Key, T> &other)

将other 哈希中的所有项插入到该哈希中,并返回该哈希的引用。

该函数于 Qt 6.0 中引入。

另请参阅 insert()。

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

将other 哈希中的所有项插入到该哈希中,并返回该哈希的引用。

另请参阅 insert()。

[noexcept] T QMultiHash::value(const Key &key) const

[noexcept] T QMultiHash::value(const Key &key, const T &defaultValue) 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 的项,则该函数返回对最近插入的值的引用。

警告: 当下次对哈希调用非 const 函数,或者哈希被销毁时,返回的 迭代器/引用应被视为失效。

另请参阅 insert() 和value()。

相关的非成员函数

[since 6.1] template < typename Key, typename T, typename Predicate > qsizetype erase_if(QMultiHash<Key, T> &hash, Predicate pred)

从多哈希表hash 中移除所有满足谓词pred 的元素。

该函数支持两种类型的谓词:一种接受类型为QMultiHash<Key, T>::iterator 的参数,另一种接受类型为std::pair<const Key &, T &> 的参数。

返回被移除的元素个数(如有)。

该函数在 Qt 6.1 中引入。

[noexcept(...)] template <typename Key, typename T> size_t qHash(const QMultiHash<Key, T> &key, size_t seed = 0)

返回key 的哈希值,并使用seed 作为计算的种子。

Key 和T 这两种类型必须被 qHash() 支持。

注意: 当noexcept(qHash(std::declval<Key&>())) && noexcept(qHash(std::declval<T&>())) 为true 时,该 函数为 noexcept。

[noexcept] bool operator!=(const QMultiHash<Key, T> &lhs, const QMultiHash<Key, T> &rhs)

如果多哈希lhs 不等于多哈希rhs ,则返回true ;否则返回false 。

如果两个多哈希包含相同的 (键, 值) 对,则视为相等。

此函数要求值类型实现operator==() 。

另请参阅 operator==()。

template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiHash<Key, T> &hash)

将哈希hash 写入流out 。

此函数要求键和值的类型都实现了operator<<() 接口。

另请参阅 《Qt 数据类型的序列化》。

[noexcept] bool operator==(const QMultiHash<Key, T> &lhs, const QMultiHash<Key, T> &rhs)

如果lhs 的多哈希与rhs 的多哈希相等,则返回true ;否则返回false 。

如果两个多哈希包含相同的 (键, 值) 对,则认为它们相等。

此函数要求值类型实现operator==() 。

另请参阅 operator!=()。

template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiHash<Key, T> &hash)

从流in 中读取哈希,并将其写入hash 。

此函数要求键和值的类型都实现operator>>() 接口。

另请参阅 《Qt 数据类型的序列化》。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.