QMapIterator 类 为 QMap 类 以及 QMultiMap类 提供Java风格的常亮迭代器。
QMap既有java风格迭代器又有STL风格迭代器。java风格比STL风格的迭代器更高级也更容易使用;另一方面,java风格迭代器效率略低。
QMapIterator<Key, T> 允许你对 QMap 或者 QMultiMap进行迭代。(所谓了迭代,说白了就是对一个 QMap类的容器进行一定顺序的遍历,可以看到里面的每一个内容(内容可以是QMap类的首地址等))。
如果希望在迭代时修改该映射内容,请使用QMutableMapIterator类。
QMapIterator构造函数用QMap 作为参数。在构造之后,迭代器定位在映射的最开始(在第一个项目之前)。下面是迭代器如何顺序遍历所有元素的:
QMap<int, QWidget *> map;
...
QMapIterator<int, QWidget *> i(map);
while (i.hasNext()) {
i.next();
qDebug() << i.key() << ": " << i.value();
}
next() 返回映射中下一个项目 并且向前推进一步迭代器。 key() and value() 返回被跳过的最近项目的键和值。
不同于STL风格的迭代器,java风格迭代器指针不直接指向项目而是指向项目之间。第一次调用 next() 前推指针到第一个和第二个项目之间, 并且返回第一个项目;第二次调用 next() 前推指针到第二个和第三个项目之间;以后类推。
逆向遍历如下:
QMapIterator<int, QWidget *> i(map);
i.toBack();
while (i.hasPrevious()) {
i.previous();
qDebug() << i.key() << ": " << i.value();
}
查找特定值,再循环里面用 findNext() 或 findPrevious()
QMapIterator<int, QWidget *> i(map);
while (i.findNext(widget)) {
qDebug() << "Found widget " << widget << " under key "
<< i.key();
}
可以在同一映射上使用多个迭代器。如果在QMapIterator活动时映射被修改,QMapIterator将继续在原始映射上迭代,忽略修改后的副本。
也可参阅 QMutableMapIterator and QMap::const_iterator。
转自:
https://blog.csdn.net/yjc2018/article/details/80550362