key_iterator 类

class QMap::key_iterator

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

公共函数

QMap<键, T>::const_iteratorbase() const
booloperator!=(QMap<键, T>::key_iterator other) const
const 键 &operator*() const
QMap<键, T>::key_iterator &operator++()
QMap<键, T>::key_iteratoroperator++(int)
QMap<键, T>::key_iterator &operator--()
QMap<键, T>::key_iteratoroperator--(int)
const 键 *operator->() const
booloperator==(QMap<键, T>::key_iterator other) const

详细说明

QMap::key_iteratorQMap::const_iterator 实质上相同,区别在于 operator*() 和 operator->() 返回一个键而不是一个值。

对于大多数使用场景,应使用 QMap::iteratorQMap::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

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

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

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

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

警告:隐式共享容器上的迭代器工作方式与 STL-迭代器不完全相同。您应避免在容器活动迭代器上复制容器。更多信息,请参阅 隐式共享迭代器问题

另请参阅:QMap::const_iteratorQMap::iterator

成员函数文档

QMap<, 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!=()。

© 2024 Qt公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的<া href="http://www.gnu.org/licenses/fdl.html">GNU自由文档许可证版本1.3的条款授予的。Qt以及相应的商标是芬兰的Qt公司及其它国家/地区的商标。所有其他商标均为各自所有者的财产。