QMutableMapIterator 类
template <typename Key, typename T> class QMutableMapIteratorQMutableMapIterator 类提供了一个支持 Java 风格的非 const 迭代器,用于 QMap。更多...
头文件 | #include <QMutableMapIterator> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
公共函数
QMutableMapIterator(QMap<Key, T> &map) | |
bool | findNext(const T &value) |
bool | findPrevious(const T &value) |
bool | hasNext() const |
bool | hasPrevious() const |
const Key & | key() const |
QMutableMapIterator<Key, T>::Item | next() |
QMutableMapIterator<Key, T>::Item | peekNext() const |
QMutableMapIterator<Key, T>::Item | peekPrevious() const |
QMutableMapIterator<Key, T>::Item | previous() |
void | remove() |
void | setValue(const T &value) |
void | toBack() |
void | toFront() |
const T & | value() const |
T & | value() |
QMutableMapIterator<Key, T> & | operator=(QMap<Key, T> &container) |
详细描述
QMap 同时具有 Java 风格迭代器 和 STL 风格迭代器。STL 风格迭代器更高效,应该优先使用。
QMutableMapIterator<Key, T> 允许您遍历 QMap 并修改映射。如果您不想修改映射(或有一个 const QMap),请改用略快的 QMapIterator。
QMutableMapIterator 构造函数接受一个 QMap 作为参数。构造后,迭代器位于映射的特殊开始位置(在第一个项目之前)。以下是按顺序遍历所有元素的示例
QMap<int, QWidget *> map; ... QMutableMapIterator<int, QWidget *> i(map); while (i.hasNext()) { i.next(); qDebug() << i.key() << ": " << i.value(); }
next() 函数返回映射中的下一个项目并向前推进迭代器。key() 和 value() 函数返回跳过的最后一个项目的键和值。
与STL风格的迭代器不同,Java风格的迭代器是针对项目之间的位置进行指向,而不是直接指向项目。第一次调用next()将迭代器移动到第一个和第二个项目之间,并返回第一个项目;第二次调用next()将迭代器移动到第二个和第三个项目之间;依此类推。
这是如何逆序遍历元素的方法
QMutableMapIterator<int, QWidget *> i(map); i.toBack(); while (i.hasPrevious()) { i.previous(); qDebug() << i.key() << ": " << i.value(); }
如果您要查找某个特定值的所有出现,请使用循环中的findNext()或findPrevious()。例如
QMutableMapIterator<int, QWidget *> i(map); while (i.findNext(widget)) { qDebug() << "Found widget " << widget << " under key " << i.key(); }
如果您在遍历映射的过程中要删除项目,请使用remove()。如果要根据要修改项目值,请使用setValue()。
示例
QMutableMapIterator<QString, QString> i(map); while (i.hasNext()) { i.next(); if (i.key() == i.value()) i.remove(); }
下面的例子删除所有键和值相同的不同(键,值)对。
在任何时候,给定映射上只能有一个可变迭代器处于活动状态。此外,在迭代器处于活动状态时(与通过迭代器相反),请勿直接对映射进行任何更改,因为这可能会使迭代器失效并导致不确定的行为。
还可以参考 QMapIterator和QMap::iterator。
成员函数文档
QMap<Key, T> &QMutableMapIterator::QMutableMapIterator(QMap<Key, T> &map)
构造一个用于遍历map的迭代器。迭代器设置为在映射的前端(在第一个项之前)。
还可以参考 operator=。
QMutableMapIterator<Key, T> &QMutableMapIterator::operator=(QMap<Key, T> &container)
使迭代器操作map。迭代器设置为在映射的前端(在第一个项之前)。
void QMutableMapIterator::toFront()
将迭代器移动到容器的最前面(在第一个项之前)。
void QMutableMapIterator::toBack()
将迭代器移动到容器的最后面(在最后一个项之后)。
bool QMutableMapIterator::hasNext() const
如果迭代器前面至少有一个项目,则返回true
,即迭代器不在容器的末尾;否则返回false
。
还可以参考 hasPrevious()和next。
QMutableMapIterator<Key, T>::ItemQMutableMapIterator::next()
返回下一个项目并将迭代器前移一个位置。
调用 returnValuekey() 以获取项目键,并通过value() 获取值。
在容器的末尾位置调用此函数会导致结果未定义。
另请参阅hasNext(),peekNext() 和 previous()。
QMutableMapIterator<键,类型>::项 QMutableMapIterator::peekNext() const
返回下一个项,但不移动迭代器。
调用 returnValuekey() 以获取项目键,并通过value() 获取值。
在容器的末尾位置调用此函数会导致结果未定义。
另请参阅hasNext(),next() 和 peekPrevious()。
QMutableMapIterator<键,类型>::项 QMutableMapIterator::peekNext() const
返回对下一个项的引用,但不移动迭代器。
调用 returnValuekey() 以获取项目键,并通过value() 获取值。
在容器的末尾位置调用此函数会导致结果未定义。
另请参阅hasNext(),next() 和 peekPrevious()。
bool QMutableMapIterator::hasPrevious() const
如果迭代器后面至少有一个项,即迭代器不在容器的开头,则返回 true
;否则返回 false
。
QMutableMapIterator<键, T>::项 QMutableMapIterator::previous()
返回上一个项并将迭代器向后移动一个位置。
调用 returnValuekey() 以获取项目键,并通过value() 获取值。
在容器的开头位置调用此函数会导致结果未定义。
另请参阅hasPrevious(),peekPrevious() 和 next()。
QMutableMapIterator<键, T>::项 QMutableMapIterator::peekPrevious() const
返回上一个项,但不移动迭代器。
调用 returnValuekey() 以获取项目键,并通过value() 获取值。
在容器的开头位置调用此函数会导致结果未定义。
另请参阅hasPrevious(),previous() 和 peekNext()。
const类型 &QMutableMapIterator::value() const
返回通过其中一个遍历函数(next,previous,findNext 或 findPrevious)跳过的最后一个项的值。
在调用 next 或 findNext 之后,value() 等同于 peekPrevious().value(). 在调用 previous 或 findPrevious 之后,value() 等同于 peekNext().value().
类型 &QMutableMapIterator::value()
这是一个重载函数。
返回通过其中一个遍历函数跳过的最后一个项的值的非const引用。
const 键 &QMutableMapIterator::key() const
返回通过其中一个遍历函数(next,previous,findNext 或 findPrevious)跳过的最后一个项的密钥。
调用next() 或 findNext() 后,key() 等同于 peekPrevious().key(). 调用previous() 或 findPrevious() 后,key() 等同于 peekNext().key().
另请参阅 value().
bool QMutableMapIterator::findNext(const T &value)
从当前迭代器位置开始向前查找value。如果找到带有值 value 的 (键,值) 对,则返回 true
;否则返回 false
。
调用之后,如果找到了 value,则迭代器位于匹配项之后;否则,迭代器位于容器末尾。
另请参阅 findPrevious().
bool QMutableMapIterator::findPrevious(const T &value)
从当前迭代器位置开始向后查找value。如果找到带有值 value 的 (键,值) 对,则返回 true
;否则返回 false
。
调用之后,如果找到了 value,则迭代器位于匹配项之前;否则,迭代器位于容器开始。
另请参阅 findNext().
void QMutableMapIterator::remove()
删除由任意一种遍历函数(next(),previous(),findNext(),findPrevious())跳过的最后一个项目。
另请参阅 setValue().
void QMutableMapIterator::setValue(const T &value)
使用value 替换由遍历函数(next(),previous(),findNext(),findPrevious())跳过的最后一个项的值。
遍历函数是 next(),previous(),findNext(),和 findPrevious()。
© 2024 Qt 公司有限公司。此处包含的文档贡献归各自的拥有者所有。此处提供的文档根据 mit 作者协议进行许可。Qt 和相应的标志是 Qt 公司在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。