QMapIterator Class

template <typename Key, typename T> class QMapIterator

QMapIterator 类为QMap 提供了 Java 风格的常量迭代器。更多

头文件: #include <QMapIterator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共函数

QMapIterator(const QMap<Key, T> &map)
bool findNext(const T &value)
bool findPrevious(const T &value)
bool hasNext() const
bool hasPrevious() const
const Key &key() const
QMapIterator<Key, T>::Item next()
QMapIterator<Key, T>::Item peekNext() const
QMapIterator<Key, T>::Item peekPrevious() const
QMapIterator<Key, T>::Item previous()
void toBack()
void toFront()
const T &value() const
QMapIterator<Key, T> &operator=(const QMap<Key, T> &map)

详细说明

QMap 既有Java 风格的迭代器,也有STL 风格的迭代器。STL 样式的迭代器效率更高,应优先使用。

QMapIterator<Key, T> 允许您遍历QMap 。如果您想在遍历时修改映射,请使用QMutableMapIterator

QMapIterator 构造函数的参数是QMap 。构造完成后,迭代器位于地图的最开始(第一个项目之前)。下面是按顺序遍历所有元素的方法:

QMap<int QWidget*>map;...QMapIterator<int QWidget*>i(map);while(i.hasNext()) { i.next();    qDebug() << i.key() << ": " << i.value();
}

next() 函数返回映射表中的下一个项目,并向前推进迭代器。key() 和value() 函数返回上一个跳转项的键和值。

与 STL 风格的迭代器不同,Java 风格的迭代器指向项目之间,而不是直接指向项目。第一次调用next() 会将迭代器推进到第一个和第二个项目之间的位置,并返回第一个项目;第二次调用next() 会将迭代器推进到第二个和第三个项目之间的位置;以此类推。

下面是以相反顺序遍历元素的方法:

QMapIterator<int QWidget*>i(map); i.toBack();while(i.hasPrevious()) { i.previous();    qDebug() << i.key() << ": " << i.value();
}

如果要查找某一特定值的所有出现次数,请在循环中使用findNext() 或findPrevious() 。例如

QMapIterator<int.*> i(map); while (i.findNext(widget)) QWidget*>i(map);while(i.findNext(widget)) {    qDebug() << "Found widget " << widget << " under key "
            <<i.key(); }

同一个地图上可以使用多个迭代器。如果在 QMapIterator 处于活动状态时地图被修改,QMapIterator 将继续迭代原始地图,而忽略修改后的副本。

另请参见 QMutableMapIteratorQMap::const_iterator

成员函数文档

QMapIterator::QMapIterator(const QMap<Key, T> &map)

构造一个遍历map 的迭代器。迭代器被设置为位于地图的前端(第一个条目之前)。

另请参阅 operator=() 。

QMapIterator<Key, T> &QMapIterator::operator=(const QMap<Key, T> &map)

使迭代器在map 上运行。迭代器被设置在地图的前端(第一个项目之前)。

另请参阅 toFront() 和toBack()。

void QMapIterator::toFront()

将迭代器移到容器的前面(第一个项目之前)。

另请参阅 toBack() 和next()。

void QMapIterator::toBack()

将迭代器移到容器的后面(最后一个项目之后)。

另请参阅 toFront() 和previous()。

bool QMapIterator::hasNext() const

如果迭代器前面至少有一个项目,即迭代器在容器的后面,则返回true ;否则返回false

另请参见 hasPrevious() 和next()。

QMapIterator<Key, T>::Item QMapIterator::next()

返回下一个项目,并将迭代器向前推进一个位置。

在返回值上调用key() 获取项的键,在返回值上调用value() 获取项的值。

对位于容器后部的迭代器调用此函数会导致未定义的结果。

另请参见 hasNext()、peekNext() 和previous()。

QMapIterator<Key, T>::Item QMapIterator::peekNext() const

在不移动迭代器的情况下返回下一个项目。

在返回值上调用key() 获取项的键,在返回值上调用value() 获取项的值。

对位于容器后部的迭代器调用此函数会导致未定义的结果。

另请参见 hasNext()、next() 和peekPrevious()。

bool QMapIterator::hasPrevious() const

如果迭代器后面至少有一个项目,即迭代器在容器的前面,则返回true ;否则返回false

另请参阅 hasNext() 和previous() 。

QMapIterator<Key, T>::Item QMapIterator::previous()

返回前一个项目,并将迭代器后移一个位置。

在返回值上调用key() 获取项的键,在返回值上调用value() 获取项的值。

对位于容器前部的迭代器调用此函数会导致未定义的结果。

另请参见 hasPrevious()、peekPrevious() 和next()。

QMapIterator<Key, T>::Item QMapIterator::peekPrevious() const

在不移动迭代器的情况下返回上一个项目。

在返回值上调用key() 获取项的键,在返回值上调用value() 获取项的值。

对位于容器前部的迭代器调用此函数会导致未定义的结果。

另请参见 hasPrevious()、previous() 和peekNext()。

const T &QMapIterator::value() const

返回使用某个遍历函数(next(),previous(),findNext(),findPrevious() )跳转的最后一个项目的值。

在调用next() 或findNext() 后,value() 等同于peekPrevious().value().在调用previous() 或findPrevious() 后,value() 等同于peekNext().value().

另请参阅 key()。

const Key &QMapIterator::key() const

返回使用某个遍历函数(next(),previous(),findNext(),findPrevious() )跳转的最后一个项的键值。

在调用next() 或findNext() 后,key() 等同于peekPrevious().key().在调用previous() 或findPrevious() 后,key() 等同于peekNext().key().

另请参阅 value()。

bool QMapIterator::findNext(const T &value)

从当前迭代器位置向前搜索value 。如果找到值为value 的(键、值)对,则返回true ;否则返回false

调用后,如果找到value ,迭代器将被放置在匹配项的后面;否则,迭代器将被放置在容器的后面。

另请参阅 findPrevious() 。

bool QMapIterator::findPrevious(const T &value)

从当前迭代器位置向后搜索value 。如果找到值为value 的(键、值)对,则返回true ;否则返回false

调用后,如果找到value ,迭代器将被放置在匹配项的前面;否则,迭代器将被放置在容器的前面。

另请参阅 findNext() 。

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