当前位置: 首页 > news >正文

Qt5 C++ QMap使用总结

文章目录

      • 功能解释
      • 代码使用案例
      • 代码解释
      • 注意事项
      • 代码例子参考

功能解释

QList<T> QMap::values() const
Returns a list containing all the values in the map, in ascending order of their keys. If a key is associated with multiple values, all of its values will be in the list, and not just the most recently inserted one.
See also keys() and value().

QList<T> QMap::values() constQMap 类的一个成员函数,其作用是返回一个包含 QMap 中所有值的列表。这里的 T 代表 QMap 中存储的值的类型。

该函数会按照键的升序排列来收集所有的值。如果一个键关联了多个值(在某些特殊的多值映射场景下),那么这个键对应的所有值都会被包含在返回的列表中,而不仅仅是最近插入的那个值。

此外,文档还提到了可以参考 keys() 函数(用于返回 QMap 中所有键的列表)和 value() 函数(用于根据键获取对应的值)。

代码使用案例

以下是一个使用 QMapvalues() 函数的详细示例代码:

#include <QCoreApplication>
#include <QMap>
#include <QList>
#include <QDebug>

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

    // 创建一个 QMap,键为 QString 类型,值为 int 类型
    QMap<QString, int> myMap;

    // 向 QMap 中插入一些键值对
    myMap.insert("apple", 10);
    myMap.insert("banana", 20);
    myMap.insert("cherry", 30);

    // 调用 values() 函数获取包含所有值的列表
    QList<int> valueList = myMap.values();

    // 输出获取到的值列表
    qDebug() << "Values in the map:";
    for (int value : valueList) {
        qDebug() << value;
    }

    return a.exec();
}

代码解释

  1. 包含必要的头文件

    • QCoreApplication:用于创建 Qt 应用程序的核心对象。
    • QMap:提供了关联数组(键值对)的功能。
    • QList:用于存储值的列表。
    • QDebug:用于在控制台输出调试信息。
  2. 创建 QMap 并插入键值对

    • QMap<QString, int> myMap;:创建一个 QMap 对象,键的类型为 QString,值的类型为 int
    • myMap.insert("apple", 10); 等语句:向 QMap 中插入不同的键值对。
  3. 调用 values() 函数

    • QList<int> valueList = myMap.values();:调用 values() 函数获取 QMap 中所有值的列表,并将其存储在 valueList 中。
  4. 遍历并输出值列表

    • 使用范围 for 循环遍历 valueList,并使用 qDebug() 输出每个值。

注意事项

  • values() 函数是一个常量成员函数,意味着它不会修改 QMap 的内容。
  • 返回的列表中值的顺序是按照键的升序排列的。在这个例子中,由于键是字符串,它们会按照字典序排列。

代码例子参考

所以能修改Map的值的代码如下:

#include <QString>
#include <QDebug>

// 定义 User 类
class User {
public:
    // 构造函数,用于初始化用户信息
    User(const QString& name = "", int age = 0) : m_name(name), m_age(age) {}

    // 获取用户姓名
    QString getName() const {
        return m_name;
    }

    // 设置用户姓名
    void setName(const QString& name) {
        m_name = name;
    }

    // 获取用户年龄
    int getAge() const {
        return m_age;
    }

    // 设置用户年龄
    void setAge(int age) {
        m_age = age;
    }

private:
    QString m_name;
    int m_age;
};
#include <QMap>
#include <QString>
#include <QDebug>

// 上面定义的 User 类代码放在这里

int main() {
    // 创建一个 QMap<QString, User> 对象
    QMap<QString, User> userMap;

    // 向 map 中插入元素
    userMap.insert("user1", User("Alice", 25));
    userMap.insert("user2", User("Bob", 30));
    userMap.insert("user3", User("Charlie", 35));

    // 输出修改前的信息
    qDebug() << "修改前的信息:";
    for (const auto& key : userMap.keys()) {
        const User& user = userMap.value(key);
        qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
    }

    // 使用迭代器遍历 QMap 并修改 Value 的值
    for (auto it = userMap.begin(); it != userMap.end(); ++it) {
        // 修改用户的年龄,每个用户年龄加 1
        User& user = it.value();
        user.setAge(user.getAge() + 1);
        // 修改用户的姓名,在原姓名后添加 "_new"
        user.setName(user.getName() + "_new");
    }

    // 输出修改后的信息
    qDebug() << "\n修改后的信息:";
    for (const auto& key : userMap.keys()) {
        const User& user = userMap.value(key);
        qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
    }

    return 0;
}
#include <QMap>
#include <QString>
#include <QDebug>

// User 类定义放在这里

int main() {
    // 创建一个 QMap<QString, User> 对象
    QMap<QString, User> userMap;

    // 向 map 中插入元素
    userMap.insert("user1", User("Alice", 25));
    userMap.insert("user2", User("Bob", 30));
    userMap.insert("user3", User("Charlie", 35));

    // 使用迭代器遍历 QMap
    // 方法一:使用 QMap::iterator(非 const 迭代器)
    qDebug() << "使用 QMap::iterator 遍历:";
    for (QMap<QString, User>::iterator it = userMap.begin(); it != userMap.end(); ++it) {
        const QString& key = it.key();
        const User& user = it.value();
        qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
    }

    // 方法二:使用 QMap::const_iterator(const 迭代器)
    qDebug() << "\n使用 QMap::const_iterator 遍历:";
    for (QMap<QString, User>::const_iterator cit = userMap.constBegin(); cit != userMap.constEnd(); ++cit) {
        const QString& key = cit.key();
        const User& user = cit.value();
        qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
    }

    // 方法三:使用范围-based for 循环(C++11 及以上)
    qDebug() << "\n使用范围-based for 循环遍历:";
    for (const auto& pair : userMap) {
        const QString& key = pair.first;
        const User& user = pair.second;
        qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
    }

    return 0;
}
void RecalculateVoltage()
{
	QMutexLocker locker(&m_lock);

	QMap<QString, TEST_DATA>::iterator it;
	for (it = m_mapPath2Data.begin(); it != m_mapPath2Data.end(); ++it)
	{
		TEST_DATA& stTestData = it.value();
		//...
	}
}

相关文章:

  • 广州专业的网站制作网店营销策略有哪些
  • 如何做网站结构优化市场监督管理局投诉电话
  • b2c交易模式的网站有哪些什么是百度竞价推广
  • Wordpress页面添加小工具宁波seo教程app推广
  • 怎么用网吧电脑做网站服务器襄阳网站seo
  • 网站建设推广公众号制作推广青岛做网站设计哪里有
  • Unity Shader学习日记 part6 基本光照模型
  • CES Asia 2025增设未来办公教育板块,科技变革再掀高潮
  • Trae 是一款由 AI 驱动的 IDE,让编程更加愉悦和高效。国际版集成了 GPT-4 和 Claude 3.5,国内版集成了DeepSeek-r1
  • 【CXX】4.4 其他构建系统
  • 分布式多卡训练(DDP)踩坑
  • 解锁Android RemoteViews:跨进程UI更新的奥秘
  • 软考架构师笔记-存储管理
  • 边缘计算在豪越智慧消防中的应用探索
  • pgsql行列转换
  • 大数据学习(56)-Impala
  • 初次使用 IDE 搭配 Lombok 注解的配置
  • kafka配置
  • 迷你世界脚本文字板接口:Graphics
  • 掌握 Python 高级特性:深入理解迭代器与生成器
  • 城市地质安全专题连载⑧ | 强化工程地质安全保障力度,为工程项目全栈护航
  • 【Aioredis实战总结】如何修改aioredis的最大连接数。
  • 带你从入门到精通——自然语言处理(五. Transformer中的自注意力机制和输入部分)
  • 泛型存储,在需求不稳定的中小型项目里,多用JSON作为存储类型可以带来哪些收益
  • perl初试
  • 网络服务之SSH协议