key_iterator类

QMultiHash::key_iterator

QMultiHash::key_iterator 类为 QMultiHash 键提供了一种 STL 风格的 const 迭代器。 更多...

公共函数

QMultiHash::const_iteratorbase() const
booloperator!=(QMultiHash::key_iterator other) const
const Key &operator*() const
QMultiHash::key_iterator &operator++()
QMultiHash::key_iteratoroperator++(int)
const Key *operator->() const
booloperator==(QMultiHash::key_iterator other) const

详细描述

QMultiHash::key_iterator 实质上与 QMultiHash::const_iterator 相同,不同之处在于 operator*() 和 operator->() 返回键而不是值。

对于大多数用途应使用 QMultiHash::iteratorQMultiHash::const_iterator,您可以通过调用 QMultiHash::iterator::key() 轻易地访问键

for (auto it = hash.cbegin(), end = hash.cend(); it != end; ++it) {
    cout << "The key: " << it.key() << endl;
    cout << "The value: " << qPrintable(it.value()) << endl;
    cout << "Also the value: " << qPrintable(*it) << endl;
}

然而,为了使 QMultiHash 的键与 STL 风格的算法兼容,我们需要一个解引用为键而不是值的迭代器。使用 QMultiHash::key_iterator,我们可以将算法应用于键的范围,而无需调用 QMultiHash::keys(),这效率低下,因为它需要一次 QMultiHash 迭代和内存分配来创建临时 QList

// Inefficient, keys() is expensive
QList<int> keys = hash.keys();
int numPrimes = std::count_if(keys.cbegin(), keys.cend(), isPrimeNumber);
qDeleteAll(hash2.keys());

// Efficient, no memory allocation needed
int numPrimes = std::count_if(hash.keyBegin(), hash.keyEnd(), isPrimeNumber);
qDeleteAll(hash2.keyBegin(), hash2.keyEnd());

QMultiHash::key_iterator 是 const 的,无法修改键。

默认的 QMultiHash::key_iterator 构造函数创建了一个未初始化的迭代器。您必须使用 QMultiHash 函数(如 QMultiHash::keyBegin() 或 QMultiHash::keyEnd())来初始化它。

警告:在隐式共享容器上的迭代器不与 STL 迭代器完全相同。在容器上激活迭代器时,应避免复制容器。有关更多信息,请参阅 隐式共享迭代器问题

另请参阅:QMultiHash::const_iteratorQMultiHash::iterator

成员函数文档

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

返回基于此 const_iterator 的底层数据。

[noexcept] bool key_iterator::operator!=(QMultiHash<Key, T>::key_iterator other) const

如果 other 指向的项与此迭代器不同,则返回 true;否则返回 false

另见 operator==().

[noexcept] const Key &key_iterator::operator*() const

返回当前项的键。

[noexcept] QMultiHash<Key, T>::key_iterator &key_iterator::operator++()

前置 ++ 操作符 (++i) 将迭代器移动到哈希表的下一个项,并返回对新的当前项的迭代器。

QMultiHash::keyEnd() 上调用此函数会导致未定义的结果。

[noexcept] QMultiHash<Key, T>::key_iterator key_iterator::operator++(int)

这是一个重载函数。

后置 ++ 操作符 (i++) 将迭代器移动到哈希表的下一个项,并返回对上一个项的迭代器。

[noexcept] const Key *key_iterator::operator->() const

返回当前项键的指针。

[noexcept] bool key_iterator::operator==(QMultiHash<Key, T>::key_iterator other) const

如果 other 指向与此迭代器相同的项,则返回 true;否则返回 false

另见 operator!=().

© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档根据自由软件基金会的发布,受 GNU 自由文档许可协议版本 1.3 的条款许可。Qt 和相关标志是芬兰及其它国家和地区 Qt 公司的商标。所有其他商标属于其各自所有者。