本页内容

QMutableMultiMapIterator Class

template <typename Key, typename T> class QMutableMultiMapIterator

QMutableMultiMapIterator 类为QMultiMap 提供了一个 Java 风格的非 const 迭代器。更多内容...

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

公共函数

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

详细说明

QMultiMap 同时支持Java 风格迭代器和 STL 风格迭代器。STL 风格迭代器效率更高,建议优先使用。模板参数Key 指定映射的键类型,T 指定值类型。

QMutableMultiMapIterator<Key, T> 允许您遍历一个QMultiMap 并修改该映射。如果您不想修改映射(或QMultiMap 为 const 类型),请改用速度稍快的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() 会将迭代器移动到第二个和第三个元素之间的位置;以此类推。

在元素 A、B、C、D 之间的迭代器位置

以下是如何按反向顺序遍历元素的方法:

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();
}

该示例会移除所有键和值相同的 (键, 值) 对。

在给定的映射上,任何时候都只能有一个可变迭代器处于活动状态。此外,在迭代器处于活动状态时,不应直接对映射进行修改(而非通过迭代器进行修改),因为这可能会使迭代器失效,并导致未定义行为。

另请参阅 QMultiMapIterator 和QMultiMap::iterator 。

成员函数文档

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

构建一个用于遍历map 的迭代器。该迭代器被设置为位于映射的开头(第一个元素之前)。

另请参阅 operator=()。

bool QMutableMultiMapIterator::findNext(const T &value)

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

调用完成后,如果找到了value ,则迭代器将定位在匹配项的紧后方;否则,迭代器将定位在容器的末尾。

另请参阅 findPrevious()。

bool QMutableMultiMapIterator::findPrevious(const T &value)

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

调用完成后,如果找到了value ,迭代器将定位在匹配项的前面;否则,迭代器将定位在容器的开头。

另请参阅 findNext()。

bool QMutableMultiMapIterator::hasNext() const

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

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

bool QMutableMultiMapIterator::hasPrevious() const

如果迭代器后方至少有一个元素(即迭代器不在容器的最前端),则返回true ;否则返回false 。

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

const Key &QMutableMultiMapIterator::key() const

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

在调用next() 或findNext() 之后,key() 与peekPrevious() 效果相同。key()。在调用previous() 或findPrevious() 之后,key() 与peekNext() 效果相同。key()。

另请参阅 value()。

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

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

调用返回值的 `key()` 可获取该项的键,调用 `value()` 可获取其值。

在位于容器末尾的迭代器上调用此函数将导致未定义的结果。

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

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

返回对下一个项的引用,同时不移动迭代器。

调用返回值的 `key()` 可获取该项的键,调用 `value()` 可获取其值。

在位于容器末尾的迭代器上调用此函数将导致未定义的结果。

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

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

返回上一个项目,同时不移动迭代器。

调用返回值的 `key()` 可获取该项的键,调用 `value()` 可获取其值。

在位于容器前端的迭代器上调用此函数将导致未定义的结果。

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

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

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

调用返回值的 `key()` 可获取该项的键,调用 `value()` 可获取其值。

在位于容器前端的迭代器上调用此函数将导致未定义的结果。

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

void QMutableMultiMapIterator::remove()

删除使用以下遍历函数之一(next()、previous()、findNext()、findPrevious())跳过的最后一个项目。

另请参阅 setValue()。

void QMutableMultiMapIterator::setValue(const T &value)

使用value 将最后一个被跳过的项目值替换为该值,该值是通过某个遍历函数跳过的。

这些遍历函数包括:next()、previous()、findNext() 和findPrevious()。

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

void QMutableMultiMapIterator::toBack()

将迭代器移至容器末尾(最后一个元素之后)。

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

void QMutableMultiMapIterator::toFront()

将迭代器移至容器开头(第一个元素之前)。

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

const T &QMutableMultiMapIterator::value() const

返回使用以下遍历函数之一(next()、previous()、findNext()、findPrevious())跳过的最后一个项的值。

在调用next() 或findNext() 之后,value() 与peekPrevious() 效果相同。value()。在调用previous() 或findPrevious() 之后,value() 与peekNext() 效果相同。value()。

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

T &QMutableMultiMapIterator::value()

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

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

使迭代器在map 上运行。将迭代器定位到映射的开头(第一个元素之前)。

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

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