QMapIterator 类

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值