QMap 应用举例

1.QMap 应用举例

QMap 是 Qt 中的一个关联容器,它存储了键值对,并且根据键的顺序自动排序。下面是一个简单的 QMap 应用举例,展示了如何使用 QMap 来存储和查找学生分数:

#include <QMap>  
#include <QString>  
#include <QDebug>  
  
int main() {  
    // 创建一个QMap,键为学生姓名(QString),值为分数(int)  
    QMap<QString, int> studentScores;  
  
    // 向QMap中添加学生分数  
    studentScores.insert("Alice", 85);  
    studentScores.insert("Bob", 92);  
    studentScores.insert("Charlie", 78);  
    studentScores.insert("David", 95);  
  
    // 查找并打印某个学生的分数  
    if (studentScores.contains("Bob")) {  
        qDebug() << "Bob's score:" << studentScores.value("Bob");  
    } else {  
        qDebug() << "Bob's score not found.";  
    }  
  
    // 遍历QMap并打印所有学生的分数  
    QMap<QString, int>::const_iterator i;  
    for (i = studentScores.constBegin(); i != studentScores.constEnd(); ++i) {  
        qDebug() << i.key() << ":" << i.value();  
    }  
  
    // 使用范围for循环(C++11及以上)遍历QMap  
    for (const auto &entry : studentScores.toStdMap()) {  
        qDebug() << entry.first << ":" << entry.second;  
    }  
  
    // 删除一个学生的分数记录  
    studentScores.remove("Charlie");  
  
    // 修改一个学生的分数  
    if (studentScores.contains("David")) {  
        studentScores["David"] = 98; // 更新David的分数  
    }  
  
    // 打印修改后的分数  
    qDebug() << "David's new score:" << studentScores.value("David");  
  
    return 0;  
}

在这个例子中,我们首先创建了一个 QMap,键是学生的姓名(QString 类型),值是对应的分数(int 类型)。然后,我们向这个 QMap 中插入了几个学生的分数。接下来,我们展示了如何查找特定学生的分数、如何遍历整个 QMap 打印所有学生的分数,以及如何删除和修改 QMap 中的记录。

请注意,为了使用 QMap 和其他 Qt 容器类,你需要在项目文件(如 .pro 文件)中包含 Qt 核心模块,通常是这样做的:

QT += core

并确保在代码中包含了必要的头文件。此外,这个示例使用了 qDebug() 来打印信息,这是 Qt 提供的一个方便的调试输出函数。在实际应用中,你可能需要根据具体需求来处理数据,而不是仅仅打印出来。

2.QMap 支持嵌套吗 

在 Qt 中,QMap 本身并不直接支持嵌套,也就是说,你不能直接将一个 QMap 作为另一个 QMap 的键或值。但是,你可以很容易地实现嵌套的数据结构,通常的做法是将一个 QMap 或其他容器类型作为外层 QMap 的值。

例如,你可以创建一个 QMap,其键是字符串,而值是另一个 QMap。这样的结构可以用来表示更复杂的数据关系,比如一个学生和他们多门课程的分数之间的映射。下面是一个简单的示例:

#include <QMap>  
#include <QString>  
#include <QDebug>  
  
int main() {  
    // 创建一个嵌套的QMap,外层QMap的键是学生姓名,值是另一个QMap,  
    // 内层QMap的键是课程名称,值是分数。  
    QMap<QString, QMap<QString, int>> studentGrades;  
  
    // 添加学生和他们的课程分数  
    QMap<QString, int> aliceGrades;  
    aliceGrades.insert("Math", 90);  
    aliceGrades.insert("English", 85);  
    studentGrades.insert("Alice", aliceGrades);  
  
    QMap<QString, int> bobGrades;  
    bobGrades.insert("Math", 88);  
    bobGrades.insert("Science", 92);  
    studentGrades.insert("Bob", bobGrades);  
  
    // 访问和打印学生的课程分数  
    qDebug() << "Alice's grades:";  
    QMap<QString, int> aliceGradesMap = studentGrades.value("Alice");  
    for (auto it = aliceGradesMap.constBegin(); it != aliceGradesMap.constEnd(); ++it) {  
        qDebug() << it.key() << ":" << it.value();  
    }  
  
    qDebug() << "Bob's grades:";  
    QMap<QString, int> bobGradesMap = studentGrades.value("Bob");  
    for (auto it = bobGradesMap.constBegin(); it != bobGradesMap.constEnd(); ++it) {  
        qDebug() << it.key() << ":" << it.value();  
    }  
  
    return 0;  
}

在这个例子中,我们创建了一个嵌套的 QMap,其中外层 QMap 的键是学生姓名,值是另一个 QMap。内层 QMap 的键是课程名称,值是对应的分数。这样,我们就可以很容易地存储和查找每个学生每门课程的分数了。

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值