QMutableMapIterator 类

template <typename Key, typename T> class QMutableMapIterator

QMutableMapIterator 类提供了一个支持 Java 风格的非 const 迭代器,用于 QMap。更多...

头文件 #include <QMutableMapIterator>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共函数

QMutableMapIterator(QMap<Key, T> &map)
boolfindNext(const T &value)
boolfindPrevious(const T &value)
boolhasNext() const
boolhasPrevious() const
const Key &key() const
QMutableMapIterator<Key, T>::Itemnext()
QMutableMapIterator<Key, T>::ItempeekNext() const
QMutableMapIterator<Key, T>::ItempeekPrevious() const
QMutableMapIterator<Key, T>::Itemprevious()
voidremove()
voidsetValue(const T &value)
voidtoBack()
voidtoFront()
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();
}

下面的例子删除所有键和值相同的不同(键,值)对。

在任何时候,给定映射上只能有一个可变迭代器处于活动状态。此外,在迭代器处于活动状态时(与通过迭代器相反),请勿直接对映射进行任何更改,因为这可能会使迭代器失效并导致不确定的行为。

还可以参考 QMapIteratorQMap::iterator

成员函数文档

QMap<Key, T> &QMutableMapIterator::QMutableMapIterator(QMap<Key, T> &map)

构造一个用于遍历map的迭代器。迭代器设置为在映射的前端(在第一个项之前)。

还可以参考 operator=

QMutableMapIterator<Key, T> &QMutableMapIterator::operator=(QMap<Key, T> &container)

使迭代器操作map。迭代器设置为在映射的前端(在第一个项之前)。

还可以参考 toFront()和toBack

void QMutableMapIterator::toFront()

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

还可以参考 toBack()和next

void QMutableMapIterator::toBack()

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

还可以参考 toFront()和previous

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

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

QMutableMapIterator<, T>::项 QMutableMapIterator::previous()

返回上一个项并将迭代器向后移动一个位置。

调用 returnValuekey() 以获取项目键,并通过value() 获取值。

在容器的开头位置调用此函数会导致结果未定义。

另请参阅hasPrevious(),peekPrevious() 和 next()。

QMutableMapIterator<, T>::项 QMutableMapIterator::peekPrevious() const

返回上一个项,但不移动迭代器。

调用 returnValuekey() 以获取项目键,并通过value() 获取值。

在容器的开头位置调用此函数会导致结果未定义。

另请参阅hasPrevious(),previous() 和 peekNext()。

const类型 &QMutableMapIterator::value() const

返回通过其中一个遍历函数(nextpreviousfindNextfindPrevious)跳过的最后一个项的值。

在调用 nextfindNext 之后,value() 等同于 peekPrevious().value(). 在调用 previousfindPrevious 之后,value() 等同于 peekNext().value().

另请参阅key() 和 setValue()。

类型 &QMutableMapIterator::value()

这是一个重载函数。

返回通过其中一个遍历函数跳过的最后一个项的值的非const引用。

const &QMutableMapIterator::key() const

返回通过其中一个遍历函数(nextpreviousfindNextfindPrevious)跳过的最后一个项的密钥。

调用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()。

另请参阅 key(),value(),和 remove().

© 2024 Qt 公司有限公司。此处包含的文档贡献归各自的拥有者所有。此处提供的文档根据 mit 作者协议进行许可。Qt 和相应的标志是 Qt 公司在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。