本页内容

QMap::key_iterator Class

class QMap::key_iterator

QMap::key_iterator 类为QMap 键提供了一个STL风格的const迭代器。更多内容...

公共函数

key_iterator()
QMap<Key, T>::const_iterator base() const
bool operator!=(QMap<Key, T>::key_iterator other) const
const Key &operator*() const
QMap<Key, T>::key_iterator &operator++()
QMap<Key, T>::key_iterator operator++(int)
QMap<Key, T>::key_iterator &operator--()
QMap<Key, T>::key_iterator operator--(int)
const Key *operator->() const
bool operator==(QMap<Key, T>::key_iterator other) const

详细说明

QMap::key_iterator 本质上与QMap::const_iterator 相同,区别在于operator*()和operator->()返回的是键而非值。

在大多数情况下,应使用 `QMap::iterator ` 和 `QMap::const_iterator `,您可以通过调用 `QMap::iterator::key()` 轻松获取键:

for (QMap<int, QString>::const_iterator it = map.cbegin(), end = map.cend(); it != end; ++it) {
    cout << "The key: " << it.key() << endl;
    cout << "The value: " << qPrintable(it.value()) << endl;
    cout << "Also the value: " << qPrintable(*it) << endl;
}

然而,为了实现QMap 的键与 STL 风格算法之间的互操作性,我们需要一种解引用后返回键而非值的迭代器。借助QMap::key_iterator ,我们可以对一组键应用算法,而无需调用QMap::keys()——后者效率较低,因为它需要进行一次QMap 迭代,并分配内存来创建临时对象QList 。

// 效率低下,keys() 的开销较大
QList<int>keys=map.keys();
intnumPrimes=std::count_if(map.cbegin(),map.cend(),isPrimeNumber);
qDeleteAll(map2.keys());

// 高效,无需内存分配
intprimeNums=std::count_if(map.keyBegin(),map.keyEnd(),isPrimeNumber);
qDeleteAll(map2.keyBegin(), map2.keyEnd());

QMap::key_iterator 如果为 const,则无法修改键。

默认的QMap::key_iterator 构造函数会创建一个未初始化的迭代器。您必须使用QMap 函数(如QMap::keyBegin()或QMap::keyEnd())对其进行初始化。

警告: 隐式共享容器上的迭代器其 工作方式与 STL 迭代器并不完全一致。当迭代器在容器上处于活动状态时,应避免复制该容器。有关更多信息,请参阅“隐式共享迭代器问题”。

另请参阅 QMap::const_iterator 和QMap::iterator 。

成员函数文档

[default] key_iterator::key_iterator()

默认——构造一个key_iterator 的实例。

QMap<Key, T>::const_iterator key_iterator::base() const

返回该 `key_iterator ` 所基于的底层 `const_iterator `。

bool key_iterator::operator!=(QMap<Key, T>::key_iterator other) const

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

另请参阅 operator==()。

const Key &key_iterator::operator*() const

返回当前项的键。

QMap<Key, T>::key_iterator &key_iterator::operator++()

前缀运算符++ (++i )将迭代器向前移动到哈希表中的下一个项目,并返回指向新当前项目的迭代器。

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

另请参阅 operator--()。

QMap<Key, T>::key_iterator key_iterator::operator++(int)

后缀运算符++ (i++ )将迭代器向前移动到哈希表中的下一个元素,并返回指向上一个元素的迭代器。

这是一个重载函数。

QMap<Key, T>::key_iterator &key_iterator::operator--()

前缀运算符-- (--i )将前一个元素设为当前元素,并返回一个指向新当前元素的迭代器。

在 `QMap::keyBegin()` 上调用此函数将导致未定义的结果。

另请参阅 operator++()。

QMap<Key, T>::key_iterator key_iterator::operator--(int)

后缀运算符-- (i-- )将前一个元素设为当前元素,并返回一个指向前一个元素的迭代器。

这是一个重载函数。

const Key *key_iterator::operator->() const

返回指向当前项键的指针。

bool key_iterator::operator==(QMap<Key, T>::key_iterator other) const

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

另请参阅 operator!=()。

© 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.