QMutableMultiMapIterator 类
template <typename Key, typename T> class QMutableMultiMapIteratorQMutableMultiMapIterator 类提供了对 QMultiMap 的 Java 风格非常量迭代器。了解更多...
头文件 | #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> &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(); }
此示例删除所有键和值相同的(键,值)对。
在任何给定时间,一个映射上只能有一个可变迭代器处于活动状态。此外,在迭代器处于活动状态时应避免直接修改映射(与通过迭代器相反),因为这可能会使迭代器失效并导致不确定的行为。
另请参阅QMultiMapIterator和QMultiMap::iterator。
成员函数文档
QMutableMultiMapIterator::QMutableMultiMapIterator(QMultiMap<Key, T> &map)
构建用于遍历映射的迭代器。迭代器将设置为指向映射的开始位置(在第一条元素之前)。
另请参阅operator=。
QMutableMultiMapIterator<Key, T> &QMutableMultiMapIterator::operator=(QMultiMap<Key, T> &container)
使迭代器在映射上操作。迭代器被设置为指向映射的开始位置(在第一条元素之前)。
void QMutableMultiMapIterator::toFront()
将迭代器移动到容器的开头(在第一条元素之前)。
void QMutableMultiMapIterator::toBack()
将迭代器移动到容器的末尾(在最后一条元素之后)。
bool QMutableMultiMapIterator::hasNext() const
如果迭代器前面至少有一个元素,则返回true
,即迭代器不在容器的末尾;否则返回false
。
另请参阅hasPrevious和next。
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
。
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(). 相等。
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()。
© 2024 Qt公司有限公司。此处包含的文档贡献的版权属于各自的拥有者。本处提供的文档是根据自由软件基金会发布的 GNU自由文档许可版本1.3 的条款许可的。Qt及其 respective 标志是芬兰和/或在世界上其他国家的 Qt公司有限公司的商标。所有其他商标归各自的所有者所有。