QMutableMultiMapIterator 类

template <typename Key, typename T> class QMutableMultiMapIterator

QMutableMultiMapIterator 类提供了对 QMultiMap 的 Java 风格非常量迭代器。了解更多...

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

公共函数

QMutableMultiMapIterator(QMultiMap<Key, T> &map)
boolfindNext(const T &value)
boolfindPrevious(const T &value)
boolhasNext() const
boolhasPrevious() const
const Key &key() const
QMutableMultiMapIterator<Key, T>::Itemnext()
QMutableMultiMapIterator<Key, T>::ItempeekNext() const
QMutableMultiMapIterator<Key, T>::ItempeekPrevious() const
QMutableMultiMapIterator<Key, T>::Itemprevious()
voidremove()
voidsetValue(const T &value)
voidtoBack()
voidtoFront()
const T &value() const
T &value()
QMutableMultiMapIterator<Key, T> &operator=(QMultiMap<Key, T> &container)

详细描述

QMultiMap 具有同时具备 Java 风格迭代器STL 风格迭代器。STL 风格迭代器更高效,应该优先使用。

QMutableMultiMapIterator<Key, T> 允许您遍历 QMultiMap 并修改该映射。如果您不想修改映射(或有一个常量 QMultiMap),则请使用稍快的 QMultiMapIterator

QMutableMultiMapIterator 构造函数需要一个 QMultiMap 作为参数。构建后,迭代器位于映射的非常开始位置(在第一个项目之前)。以下是如何按顺序遍历所有元素:

QMultiMap<int, QWidget *> multimap;
...
QMutableMultiMapIterator<int, QWidget *> i(multimap);
while (i.hasNext()) {
    i.next();
    qDebug() << i.key() << ": " << i.value();
}

next() 函数返回映射中的下一个项目并向前移动迭代器。 key() 和 value() 函数返回跳过的最后一个项的键和值。

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

这里是按逆序遍历元素的示例

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

如果您想查找特定值的所有出现,请在循环中调用findNext()或findPrevious()。例如

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

如果您在遍历映射时想删除元素,请使用remove()。如果您想修改元素的值,请使用setValue()。

示例

QMutableMultiMapIterator<QString, QString> i(multimap);
while (i.hasNext()) {
    i.next();
    if (i.key() == i.value())
        i.remove();
}

此示例删除所有键和值相同的(键,值)对。

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

另请参阅QMultiMapIteratorQMultiMap::iterator

成员函数文档

QMutableMultiMapIterator::QMutableMultiMapIterator(QMultiMap<Key, T> &map)

构建用于遍历映射的迭代器。迭代器将设置为指向映射的开始位置(在第一条元素之前)。

另请参阅operator=

QMutableMultiMapIterator<Key, T> &QMutableMultiMapIterator::operator=(QMultiMap<Key, T> &container)

使迭代器在映射上操作。迭代器被设置为指向映射的开始位置(在第一条元素之前)。

另请参阅toFronttoBack

void QMutableMultiMapIterator::toFront()

将迭代器移动到容器的开头(在第一条元素之前)。

另请参阅toBacknext

void QMutableMultiMapIterator::toBack()

将迭代器移动到容器的末尾(在最后一条元素之后)。

另请参阅toFrontprevious

bool QMutableMultiMapIterator::hasNext() const

如果迭代器前面至少有一个元素,则返回true,即迭代器不在容器的末尾;否则返回false

另请参阅hasPreviousnext

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

返回下一个元素并前进一个位置。

在返回值上调用key()以获取元素的键,并调用value()以获取值。

在容器的末尾迭代器上调用此函数会导致不确定的结果。

另请参阅 hasNext(),peekNext() 和 previous

QMutableMultiMapIterator<Key, T> 的 Item peekNext() const

返回对下一个元素的引用而不移动迭代器。

在返回值上调用key()以获取元素的键,并调用value()以获取值。

在容器的末尾迭代器上调用此函数会导致不确定的结果。

另请参阅 hasNext(),next() 和 peekPrevious

bool hasPrevious() const

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

另请参阅 hasNext() 和 previous

QMutableMultiMapIterator<Key, T> 的 Item previous()

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

在返回值上调用key()以获取元素的键,并调用value()以获取值。

在容器的开头迭代器上调用此函数会导致不确定的结果。

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

QMutableMultiMapIterator<Key, T> 的 Item peekPrevious() const

返回上一个元素而不移动迭代器。

在返回值上调用key()以获取元素的键,并调用value()以获取值。

在容器的开头迭代器上调用此函数会导致不确定的结果。

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

const T & value() const

返回通过一个遍历函数(next(),previous(),findNext(),findPrevious)跳过的最后一个元素的值。

在调用 next() 或者 findNext() 之后,value() 与 peekPrevious().value(). 相等。在调用 previous() 或者 findPrevious() 之后,value() 与 peekNext().value(). 相等。

另请参阅 key() 和 setValue

T & value()

这是一个重载函数。

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

const Key & key() const

返回使用遍历函数(next(),previous(),findNext(),findPrevious())之一跳过的最后项的键。

在对 next()或 findNext()进行调用后,key()是等于 peekPrevious().key()的。在对 previous()或 findPrevious()进行调用后,key()等于 peekNext().key()。

另请参阅value()。

bool QMutableMultiMapIterator::findNext(const T &value)

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

调用后,如果找到了 value,则迭代器位于匹配项之后;否则,迭代器位于容器的末尾。

另请参阅findPrevious()。

bool QMutableMultiMapIterator::findPrevious(const T &value)

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

调用后,如果找到 value,则迭代器位于匹配项之前;否则,迭代器位于容器的开头。

另请参阅findNext()。

void QMutableMultiMapIterator::remove()

删除使用遍历函数(next(),previous(),findNext(),findPrevious())之一跳过的最后项。

另请参阅setValue()。

void QMutableMultiMapIterator::setValue(const T &value)

将使用遍历函数(next(),previous(),findNext(),findPrevious())之一跳过的最后一个项的值替换为 value

遍历函数是 next(),previous(),findNext()和 findPrevious()。

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

© 2024 Qt公司有限公司。此处包含的文档贡献的版权属于各自的拥有者。本处提供的文档是根据自由软件基金会发布的 GNU自由文档许可版本1.3 的条款许可的。Qt及其 respective 标志是芬兰和/或在世界上其他国家的 Qt公司有限公司的商标。所有其他商标归各自的所有者所有。