QMultiHash 类

template class QMultiHash

QMultiHash 类是一个便利的 QHash 派生类,提供多值哈希表功能。更多内容…

头文件: #include \
qmake: QT += core
基类: QHash

注意: 该类中的所有函数都是可重入的

公共成员函数

QMultiHash(const QHash &other)
QMultiHash(InputIterator begin, InputIterator end)
QMultiHash(std::initializer_list > list)
QMultiHash()
typename QHash::const_iterator constFind(const Key &key, const T &value) const
bool contains(const Key &key, const T &value) const
int count(const Key &key, const T &value) const
typename QHash::iterator find(const Key &key, const T &value)
typename QHash::const_iterator find(const Key &key, const T &value) const
typename QHash::iterator insert(const Key &key, const T &value)
int remove(const Key &key, const T &value)
typename QHash::iterator replace(const Key &key, const T &value)
void swap(QMultiHash &other)
QList\ uniqueKeys() const
QMultiHash & unite(const QMultiHash &other)
QList\ values(const Key &key) const
QMultiHash operator+(const QMultiHash &other) const
QMultiHash & operator+=(const QMultiHash &other)

相关非成员函数

uint qHash(const QMultiHash &key, uint seed = 0)

详细描述

QMultiHash 是一种 Qt 泛型容器类。它继承 QHash 并扩展了一些便利的功能,使之比 QHash 更适合存储多值哈希。多值哈希是一种允许将多个值关联到同一个键的哈希。

因为 QMultiHash 继承 QHash,所有 QHash 的功能也适用于 QMultiHash。例如,可以使用 isEmpty() 测试哈希表是否为空,可以使用 QHash 的迭代器类(例如 QHashIterator)遍历 QMultiHash。但是与 QHash 不同,QMultiHash 提供的 insert() 函数允许同一个键插入多个元素。而 replace() 函数对应于 QHash::insert()。此外,该类还提供便利的 operator+() 和 operator+=() 运算符。

QMultiMap 不同,QMultiHash 不对插入的元素排序。唯一的保证是共享同一键的元素将按照从最新到最早插入的顺序连续出现。

例子:

  1. QMultiHash<QString, int> hash1, hash2, hash3;
  2. hash1.insert("plenty", 100);
  3. hash1.insert("plenty", 2000);
  4. // hash1.size() == 2
  5. hash2.insert("plenty", 5000);
  6. // hash2.size() == 1
  7. hash3 = hash1 + hash2;
  8. // hash3.size() == 3

QHash 不同,QMultiHash 不提供 operator[] 运算符。如果想用特定键访问最新插入的元素,使用 value() 或 replace()。

如果想取得单个键关联的所有值,可以使用 values(const Key &key),该函数返回一个 QList

  1. QList<int> values = hash.values("plenty");
  2. for (int i = 0; i < values.size(); ++i)
  3. cout << values.at(i) << Qt::endl;

共享同一键的元素按照从最新到最早插入的顺序返回。

更有效的方法是传递键调用 find() 取得第一个元素的 STL 风格迭代器,从该元素开始遍历:

  1. QMultiHash<QString, int>::iterator i = hash.find("plenty");
  2. while (i != hash.end() && i.key() == "plenty") {
  3. cout << i.value() << Qt::endl;
  4. ++i;
  5. }

QMultiHash 键和值的数据类型必须是可赋值数据类型。不能存储类似 QWidget 这样的对象作为值;应该存储 QWidget *。另外,QMultiHash 的键类型必须提供 operator==() 运算符, 并且在键类型的命名空间内还必须有一个为键类型参数返回哈希值的 qHash() 函数。具体请参考 QHash 文档。

另请参阅 QHashQHashIteratorQMutableHashIteratorQMultiMap

成员函数文档

QMultiHash::QMultiHash(const QHash &other)

构造一个 other 的副本(可能是一个 QHash 或 QMultiHash)。

另请参阅 operator=()。

template QMultiHash::QMultiHash(InputIterator begin, InputIterator end)

用迭代器范围 [begin, end) 内每个元素的副本构造一个多值哈希表。需要满足下列两个条件之一:迭代范围内的元素是包含 firstsecond 数据成员的对象(像 QPairstd::pair等),分别可以转换为 Key 类型和 T 类型;或者迭代器必须含有 key()value() 成员函数,分别返回可以转换为 Key 类型的键 T 类型的值。

Qt 5.14 中引入该函数。

QMultiHash::QMultiHash(std::initializer_list > list)

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

只有当程序在 C++11 模式下编译时,该函数才可用。

Qt 5.1 中引入该函数。

QMultiHash::QMultiHash()

构造一个空哈希表。

typename QHash::const_iterator QMultiHash::constFind(const Key &key, const T &value) const

返回迭代器,指向哈希表中键为 key,值为 value 的元素。

如果哈希表中不包含这样的元素,该函数返回 constEnd()。

Qt 4.3 中引入该函数。

另请参阅 QHash::constFind().

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

如果该哈希表包含键为 key,值为 value 的元素,返回 true;否则返回 false

Qt 4.3 中引入该函数。

另请参阅 QHash::contains().

int QMultiHash::count(const Key &key, const T &value) const

返回键为 key,值为 value 的元素个数。

Qt 4.3 中引入该函数。

另请参阅 QHash::count().

typename QHash::iterator QMultiHash::find(const Key &key, const T &value)

返回迭代器,指向键为 key,值为 value 的元素。如果哈希表中不包含这样的元素,该函数返回 end()。

如果哈希表包含多个键为 key,值为 value 的元素,迭代器指向最新插入的元素。

Qt 4.3 中引入该函数。

另请参阅 QHash::find().

typename QHash::const_iterator QMultiHash::find(const Key &key, const T &value) const

这是一个重载函数。

Qt 4.3 中引入该函数。

typename QHash::iterator QMultiHash::insert(const Key &key, const T &value)

用键 key 和值 value 插入一个新元素。

如果哈希表中已经存在相同键的元素,该函数将创建一个新元素。(这与 replace() 不同,replace() 是覆盖已经存在元素的值。)

另请参阅 replace()。

int QMultiHash::remove(const Key &key, const T &value)

从哈希表中移除所有键为 key,值为 value 的元素。返回被移除元素的个数。

Qt 4.3 中引入该函数。

另请参阅 QHash::remove()。

typename QHash::iterator QMultiHash::replace(const Key &key, const T &value)

用键 key 和值 value 插入一个新元素。

如果已经存在键为 key 的元素,该元素的值将被 value 替换。

如果有多个键为 key 的元素,最新插入的元素的值将被 value 替换。

另请参阅 insert()。

void QMultiHash::swap(QMultiHash &other)

other 哈希表与本哈希表。该操作非常快,永远不失败。

Qt 4.8 中引入该函数。

QList QMultiHash::uniqueKeys() const

以升序返回哈希表中所有键的列表。在哈希表中多次出现的键在返回的列表中只出现一次。

Qt 5.13 中引入该函数。

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

QMultiHash &QMultiHash::unite(const QMultiHash &other)

other 哈希表中的所有元素插入到本哈希表中,返回本哈希表的引用。

Qt 5.13 中引入该函数。

另请参阅 insert()。

QList QMultiHash::values(const Key &key) const

这是一个重载函数。

按照从最新到最早插入的顺序,返回所有与键 key 相关联的值的列表。

另请参阅 count() 和 insert().

QMultiHash QMultiHash::operator+(const QMultiHash &other) const

返回一个哈希表,该哈希表包含本哈希表和 other 哈希表中的所有元素。如果一个键在两个哈希表中同时存在,结果哈希表将多次包含这个键。

另请参阅 operator+=()。

QMultiHash &QMultiHash::operator+=(const QMultiHash &other)

other 哈希表中的所有元素插入到本哈希表中,返回本哈希表的引用。

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

相关非成员函数

template uint qHash(const QMultiHash &key, uint seed = 0)

返回 key 的哈希值,使用 seed 来随机化计算结果。

类型 T 必须被 qHash() 支持。

Qt 5.8 中引入该函数。