QMap迭代器QMapIterator、QMutableMapIterator的使用

文章目录

1.使用示例

#include <QCoreApplication>
#include <QMapIterator>
#include <QMutableMapIterator>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QMap<QString, QString> map;
    map.insert("Paris", "France");
    map.insert("Guatemala City", "Guatemala");
    map.insert("Mexico City", "Mexico");
    map.insert("Moscow", "Russia");

    QMapIterator<QString,QString> i(map);
    while(i.hasNext()) {
        i.next();
        qDebug() << i.key() << " : " << i.value();
    }
    if(i.findPrevious("Mexico")) qDebug() << "find 'Mexico'";  // 向前查找键的值

    QMutableMapIterator<QString, QString> j(map);
    while (j.hasNext()) {
        if (j.next().key().endsWith("City")) // endsWith()是QString类的函数
            j.remove();                      // 删除含有“City”结尾的键的项目
    }
    while(j.hasPrevious()) {
        j.previous();          // 现在的键值对为(paris,France),(Moscow,Russia)
        qDebug() << j.key() << " : " << j.value();
    }
    
    return a.exec();
}

在这里插入图片描述

<think>好的,我需要帮助用户找到如何使用QMap迭代器进行遍历的方法或示例。用户提到参考了多个站内引用,我需要结合这些引用来给出答案。首先,我需要确认用户提供的引用内容是否包含相关的示例。 查看引用[1],里面有一个使用迭代器遍历QMap的示例,代码展示了如何用const_iterator从constBegin到constEnd遍历,并输出键值对。引用[4]也有类似的例子,使用const_iterator遍历,并显示结果。引用[3]则使用了非const的iterator,在while循环中遍历。引用[5]提到了QMapIterator类,虽然具体的代码示例没有给出,但说明可以使用这个类来遍历和操作QMap。 用户的问题集中在迭代器遍历方法,所以需要整理这些引用中的不同方法。首先,常规的迭代器方法包括使用const_iterator和普通iterator,可以用for循环或者while循环。另外,QMapIteratorQt提供的Java风格迭代器,可能也是用户需要的。 接下来,我需要将这些方法分步骤说明,确保结构清晰。可能需要分为三个部分:使用const_iterator的示例,使用普通iterator的示例,以及使用QMapIterator的示例。每个部分都要提供代码示例,并标注对应的引用来源。同时,要提醒用户注意在修改QMap时的注意事项,比如使用普通iterator时可以进行修改,而const_iterator则不能。 另外,用户提供的引用中有两种不同的遍历方式:一种是使用迭代器,另一种是范围基础的for循环(C++11)。但用户明确询问的是迭代器的方法,所以范围基础的for循环可能不在本次回答范围内,但可以简要提及作为补充。 最后,生成相关问题需要考虑用户可能的后续疑问,比如性能比较、修改元素的方法,或者与其他遍历方式的区别等。需要确保问题与QMap迭代器使用相关,并帮助用户深入理解。</think>### 如何通过迭代器遍历 QMapQt C++) 在 Qt C++ 中,使用迭代器遍历 $QMap$ 可以通过多种方式实现,具体方法如下: --- #### 1. **使用 `const_iterator`(只读遍历)** 适用于不需要修改 $QMap$ 内容的场景。 **示例代码**: ```cpp QMap<QString, int> map; map["apple"] = 1; map["banana"] = 2; map["cherry"] = 3; QMap<QString, int>::const_iterator it; for (it = map.constBegin(); it != map.constEnd(); ++it) { qDebug() << "Key:" << it.key() << "Value:" << it.value(); } ``` **说明**: - `constBegin()` 和 `constEnd()` 返回只读迭代器的起始和结束位置[^1][^4]。 - 遍历时不能修改键值对,但效率较高。 --- #### 2. **使用普通迭代器(可读写遍历)** 适用于需要修改值的场景。 **示例代码**: ```cpp QMap<int, QString> map; map.insert(1, "one"); map.insert(2, "two"); map.insert(3, "three"); QMap<int, QString>::iterator it = map.begin(); while (it != map.end()) { qDebug() << it.value(); // 输出值 it.value() = "new_" + it.value(); // 修改值 ++it; } ``` **说明**: - `begin()` 和 `end()` 返回可读写迭代器[^3]。 - 可通过 `it.value()` 直接修改值(但键不可修改)。 --- #### 3. **使用 `QMapIterator`(Java 风格迭代器)** 提供更安全的遍历方式,支持查找和删除操作。 **示例代码**: ```cpp QMap<QString, int> map; map.insert("one", 1); map.insert("two", 2); QMapIterator<QString, int> it(map); while (it.hasNext()) { it.next(); qDebug() << "Key:" << it.key() << "Value:" << it.value(); } ``` **说明**: - 需先调用 `next()` 移动到下一项[^5]。 - 支持 `findNext()` 和 `remove()` 方法,但修改操作需谨慎。 --- #### **注意事项** - 使用普通迭代器时,插入或删除元素可能导致迭代器失效[^5]。 - 若需按排序顺序遍历,$QMap$ 已默认按键升序排列。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值