QMultiHash类
template <typename Key, typename T> class QMultiHashQMultiHash类是一个提供多值散列的便利QHash子类,详情请见更多...
| 头文件 | #include <QMultiHash> | 
| CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) | 
| qmake | QT += core | 
- 所有成员列表,包括继承的成员
- QMultiHash是隐式共享类的一部分。
注意:此类中所有函数都是可重入的。
公共类型
公共函数
| QMultiHash() | |
| QMultiHash(std::initializer_list<std::pair<Key, T>> list) | |
| QMultiHash(InputIterator begin, InputIterator end) | |
| QMultiHash(const QHash<Key, T> &other) | |
| (自6.4以来)auto | asKeyValueRange() & | 
| (自6.4以来)auto | asKeyValueRange() const & | 
| (自6.4以来)auto | asKeyValueRange() && | 
| (自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(const Key &key, Args &&... args) | 
| QMultiHash<Key, T>::iterator | emplace(Key &&key, Args &&... args) | 
| QMultiHash<Key, T>::iterator | emplaceReplace(const Key &key, Args &&... args) | 
| QMultiHash<Key, T>::iterator | emplaceReplace(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 | equal_range(const Key &key) const | 
| 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) | 
| Key | key(const T &value) const | 
| Key | key(const T &value, const Key &defaultKey) const | 
| QMultiHash | keyBegin() const | 
| QMultiHash | keyEnd() const | 
| QMultiHash | keyValueBegin() | 
| QMultiHash<Key, T>::const_key_value_iterator | keyValueBegin() const | 
| QMultiHash | keyValueEnd() | 
| QMultiHash<Key, T>::const_key_value_iterator | keyValueEnd() const | 
| QList | 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 | 
| T | take(const Key &key) | 
| QList | uniqueKeys() const | 
| QMultiHash | unite(const QMultiHash | 
| (since 6.0)QMultiHash | unite(const QHash | 
| T | value(const Key &key) const | 
| T | value(const Key &key, const T &defaultValue) const | 
| QList | values() const | 
| QList | values(const Key &key) const | 
| QMultiHash | operator+(const QMultiHash | 
| QMultiHash | operator+=(const QMultiHash | 
| T & | operator[](const Key &key) | 
相关非成员
| (since 6.1)qsizetype | erase_if(QMultiHash | 
| size_t | qHash(const QMultiHash | 
| QDataStream & | operator<<(QDataStream &out, const QMultiHash | 
| QDataStream & | operator>>(QDataStream &in, QMultiHash | 
详细描述
QMultiHash
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
QMap::const_key_value_iterator 类型定义提供了一个 STL 样式的 const 迭代器,用于 QMultiHash。
QMultiHash::const_key_value_iterator 与 QMultiHash::const_iterator 几乎相同,区别在于 operator*() 返回键/值对而不是值。
另请参阅 QKeyValueIterator。
QMultiHash::key_value_iterator
QMap::key_value_iterator 类型定义提供了一个 STL 样式的迭代器,用于 QMultiHash。
QMultiHash::key_value_iterator 与 QMultiHash::iterator 几乎相同,区别在于 operator*() 返回键/值对而不是值。
另请参阅 QKeyValueIterator。
成员函数文档
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函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
[noexcept] T QMultiHash::value(const Key &key) const
[noexcept] T QMultiHash::value(const Key &key, const T &defaultValue) const
返回与 key 关联的值。
如果哈希中不包含具有 key 的项目,则函数返回 defaultValue,或者如果没有提供此参数,则返回一个 默认构造的值。
如果哈希中存在与 key 关联的多个项目,则返回最近插入的一个的值。
[noexcept] Key QMultiHash::key(const T &value) const
[noexcept] Key QMultiHash::key(const T &value, const Key &defaultKey) const
返回与 value 映射的第一个键。如果哈希中不包含与 value 映射的项目,则返回 defaultKey,或者如果没有提供此参数,则返回一个 默认构造的键。
此函数可能很慢(线性时间),因为 QMultiHash 的内部数据结构优化了通过键快速查找,而不是通过值。
[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。
[noexcept] QMultiHash::QMultiHash()
构建一个空的哈希表。
QMultiHash::QMultiHash(std::initializer_list<std::pair<Key, T>> list)
构造一个具有初始化列表中每个元素副本的多重哈希表。
template <typename InputIterator> QMultiHash::QMultiHash(InputIterator begin, InputIterator end)
构造一个包含迭代器范围 [begin, end) 中每个元素副本的多重哈希表。该范围所迭代的元素必须是具有 first 和 second 数据成员的对象(如 std::pair),可转换为 Key 和 T 分别;或者迭代器必须具有 key() 和 value() 成员函数,分别返回可转换为 Key 和 T 的键和值。
[explicit] QMultiHash::QMultiHash(const QHash<Key, T> &other)
构建一个 other 的副本(可以是 QHash 或 QMultiHash)。
QMultiHash<Key, T>::iterator QMultiHash::begin()
返回一个指向哈希簿中第一个项目的 STL-style iterator。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅constBegin() 和 end。
[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::begin() const
这是一个重载函数。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::cbegin() const
返回一个指向哈希簿中第一个项目的 const STL-style iterator。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::cend() const
返回一个指向哈希簿中最后一个项目的后面的虚构项目的 const STL-style iterator。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
[noexcept(...)] void QMultiHash::clear()
从哈希表中删除所有项并释放它占用的所有内存。
注意:当 "std::is_nothrow_destructible
另请参阅:remove()。
[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::constBegin() const
返回一个指向哈希簿中第一个项目的 const STL-style iterator。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
[noexcept] QMultiHash<Key, T>::const_iterator QMultiHash::constEnd() const
返回一个指向哈希簿中最后一个项目的后面的虚构项目的 const STL-style iterator。
警告:下次您在对哈希调用一个非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
返回一个指向哈希表中第一个条目的 const STL-style 迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅:keyValueBegin()。
[noexcept] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::constKeyValueEnd() const
返回一个指向哈希表中最后一个条目之后的假想条目的 const STL-style 迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅:constKeyValueBegin()。
[noexcept] bool QMultiHash::contains(const Key &key, const T &value) const
如果哈希表包含具有指定 key 和 value 的项,则返回 true;否则返回 false。
另请参阅:contains()。
[noexcept] qsizetype QMultiHash::count(const Key &key, const T &value) const
返回具有指定 key 和 value 的项的数量。
另请参阅:count()。
[noexcept] QMultiHash<Key, T>::iterator QMultiHash::end()
返回一个指向哈希表中最后一个项之后的假想项的 STL-style 迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
[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)
返回一对迭代器,分别界定在key下存储的值范围的端点[first, second)。如果范围为空,则两个迭代器将等于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::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()不同,后者会覆盖现有项目的值。)
返回指向新元素的迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅replace()。
[noexcept] QMultiHash<Key, T>::key_iterator QMultiHash::keyBegin() const
返回一个指向哈希中第一个键的常量STL-style iterator。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅keyEnd()。
[noexcept] QMultiHash<Key, T>::key_iterator QMultiHash::keyEnd() const
返回一个指向哈希中最后一个键之后的一个虚构项的常量STL-style iterator。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅keyBegin()。
[无异常] QMultiHash<Key, T>::key_value_iterator QMultiHash::keyValueBegin()
返回一个指向哈希中第一个条目的 STL样式迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅keyValueEnd。
[无异常] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::keyValueBegin() const
返回一个指向哈希表中第一个条目的 const STL-style 迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅keyValueEnd。
[无异常] QMultiHash<Key, T>::key_value_iterator QMultiHash::keyValueEnd()
返回一个指向哈希中最后一项之后虚构条目的 STL样式迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅:keyValueBegin()。
[无异常] QMultiHash<Key, T>::const_key_value_iterator QMultiHash::keyValueEnd() const
返回一个指向哈希表中最后一个条目之后的假想条目的 const STL-style 迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅: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()。
[自6.1起] 模板 <typename Predicate> qsizetype QMultiHash::removeIf(Predicate pred)
从多哈希中移除所有使谓词 pred 返回 true 的元素。
该函数支持接受类型为 QMultiHash<Key, T>::iterator 或 std::pair<const Key &, T &> 的谓词。
如果有任何元素被移除,则返回被移除的元素数量。
此函数在 Qt 6.1 中引入。
QMultiHash<Key, T>::iterator QMultiHash::replace(const Key &key, const T &value)
插入具有key和一个值为value的新项。
如果已经存在具有 键 的项,那么该项的值将被 值 替换。
如果存在多个具有 键 的项,则将最近插入的项的值替换为 值。
返回一个指向新/更新元素的迭代器。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
另请参阅 insert。
[noexcept] void QMultiHash::swap(QMultiHash<Key, T> &other)
交换哈希 other 与此哈希。此操作非常快且从不失败。
T QMultiHash::take(const Key &key)
从哈希中删除具有 键 的项并返回与其关联的值。
如果该项不在哈希中,函数则简单地返回一个 默认构造的值。如果哈希中为 键 包含多个项,则只移除最近插入的一项。
如果您不使用返回值,则 remove() 更高效。
另请参阅:remove()。
QList<Key> QMultiHash::uniqueKeys() const
返回一个包含哈希中所有键的列表。哈希表中多次出现的键在返回的列表中只出现一次。
QMultiHash<Key, T> &QMultiHash::unite(const QMultiHash<Key, T> &other)
将 other 哈希中的所有项插入到此哈希中,并返回对此哈希的引用。
另请参阅 insert。
[since 6.0] QMultiHash<Key, T> &QMultiHash::unite(const QHash<Key, T> &other)
将 other 哈希中的所有项插入到此哈希中,并返回对此哈希的引用。
该函数从 Qt 6.0 开始引入。
另请参阅 insert。
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
返回一个包含此哈希中所有项以及其他所有项的哈希。如果两个哈希共享同一个键,则结果哈希将包含该键多次。
另请参阅 operator+=().
QMultiHash<Key, T> &QMultiHash::operator+=(const QMultiHash<Key, T> &other)
将 other 哈希中的所有项插入到此哈希中,并返回对此哈希的引用。
T &QMultiHash::operator[](const Key &key)
返回与 key 关联的值,作为可修改的引用。
如果哈希中不存在 key 的项,则函数将在哈希中插入一个带有 key 的 默认构造的值,并返回对该值的引用。
如果哈希中存在多个 key 的项,则此函数将返回最近插入的值的引用。
警告:下次您在对哈希调用一个非const函数或在哈希被销毁时,返回的迭代器/引用应被视为无效。
相关非成员
[since 6.1] 模板 <typename Key, typename T, typename Predicate> qsizetype erase_if(QMultiHash<Key, T> &hash, Predicate pred)
从多哈希 hash 中移除所有使谓词 pred 返回 true 的元素。
该函数支持接受类型为 QMultiHash<Key, T>::iterator 或 std::pair<const Key &, T &> 的谓词。
如果有任何元素被移除,则返回被移除的元素数量。
此函数在 Qt 6.1 中引入。
[noexcept(...)] 模板 <typename Key, typename T> size_t qHash(const QMultiHash<Key, T> &key, size_t seed = 0)
使用 seed 作为计算种子来返回 key 的哈希值。
类型 T 必须受 qHash() 支持。
注意:当 "noexcept(qHash(std::declval<Key&>())) && noexcept(qHash(std::declval<T&>()))" 为真时,此函数不会抛出异常。
模板 <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMultiHash<Key, T> &hash)
将哈希 hash 写入流 out。
此函数要求键和值类型实现 operator<<()。
另请参阅 序列化 Qt 数据类型.
模板 <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMultiHash<Key, T> &hash)
从流 in 中读取哈希到 hash 中。
此函数要求键和值类型实现 operator>>()。
另请参阅 序列化 Qt 数据类型.
© 2024 Qt公司有限公司。本文档的贡献者保留了其各自的权利。本提供的文档遵循自由软件基金会发布的 GNU自由文档许可版本1.3 的条款。Qt及其相关标志是芬兰和/或其他国家的Q公司注册商标。所有其他商标属于其各自的所有者。