QMapIterator 类

算是自己用一些类时的记录吧,拿出来分享一下,也有对QT手册某些内容的翻译以及一些自己的理解。之前学习一个新类等的用法,没有做过详细的记录,全屏脑子和例子,一旦多了总有记不住的时候,倒不如边学边编辑记录了。第一篇博文,肯定写的不会很好哦。

QMapIterator 类 


QMapIterator 类 为 QMap 类  以及  QMultiMap类  提供Java风格的常亮迭代器。

QMap既有java风格迭代器又有STL风格迭代器。java风格比STL风格的迭代器更高级也更容易使用;另一方面,java风格迭代器效率略低。

QMapIterator 允许你对 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 类_第1张图片

逆向遍历如下:

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


你可能感兴趣的:(QT/C++学习,QT)