Qt5 C++ QMap使用总结

news2025/3/7 0:05:40

文章目录

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

功能解释

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();
		//...
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive-08之数据仓库之建模、分析

一、目标 掌握数据仓库基本概念熟悉数据仓库的模型建立 二、知识要点 1. 数据仓库基本介绍 英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供决策支持&#xff08;Decision Support&#xff09;…

仿12306项目(4)

基本预定车票功能的开发 对于乘客购票来说&#xff0c;需要有每一个车次的余票信息&#xff0c;展示给乘客&#xff0c;供乘客选择&#xff0c;因此首个功能是余票的初始化&#xff0c;之后是余票查询&#xff0c;这两个都是控台端。对于会员端的购票&#xff0c;需要有余票查询…

MySQL零基础教程16—表连接进阶

复习表别名 之前已经学习过&#xff0c;查询的时候可以使用as来对检索的列进行重命名&#xff0c;这样可以让sql更加简介&#xff0c;增强易读性&#xff08;as可以省略&#xff09; 此外&#xff0c;使用表别名还可以支持在一条select语句中&#xff0c;一个表是被多次使用 …

【JavaSE-3】运算符

1、什么是运算符 就是对常量或者变量进行操作的符号&#xff0c;如&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/ 表达式&#xff1a; 用运算符把常量或者变量连接起来的&#xff0c;符合java语法的式子就是表达式。 2、 算术运算符 2.1、基本四则运算符 - * / % 都…

直接法估计相机位姿

引入 在前面的文章&#xff1a;运动跟踪——Lucas-Kanade光流中&#xff0c;我们了解到特征点法存在一些缺陷&#xff0c;并且用光流法追踪像素点的运动来替代特征点法进行特征点匹配的过程来解决这些缺陷。而这篇文章要介绍的直接法则是通过计算特征点在下一时刻图像中的位置…

VS2022C#windows窗体应用程序调用DeepSeek API

目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局‌‌ 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…

kettle插件-高性能插入更新插件Upsert

场景&#xff1a;假如T日需要将a表中T-1日的数据同步到b表。由于某种业务需求a表中已经同步到b表中的数据发生了变化需要重新同步&#xff0c;这个时候就会用到插入更新插件&#xff0c;也就是 说a表中数据重新同步b表&#xff0c;若b表中存在此数据&#xff08;根据唯一id&am…

本地部署Qwen2.5-VL-7B-Instruct模型

本地部署Qwen2.5-VL-7B-Instruct模型 本地部署Permalink **创建环境** conda create -n qwenvl python3.11 -y# 报错&#xff1a; Solving environment: failedPackagesNotFoundError: The following packages are not available from current channels:# 处理&#xff1a; c…

【C++学习篇】智能指针

目录 1. 智能指针的使用场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使用 4.shared_ptr和weak_ptr 4.1shared_ptr的循环引用问题 4.2 weak_ptr 1. 智能指针的使用场景分析 下⾯程序中我们可以看到&#xff0c;new了以后&#xff0c;我们也delete了&#xff0c…

决策树(Decision Tree)基础知识

目录 一、回忆1、*机器学习的三要素&#xff1a;1&#xff09;*函数族2&#xff09;*目标函数2.1&#xff09;*模型的其他复杂度参数 3&#xff09;*优化算法 2、*前处理/后处理1&#xff09;前处理&#xff1a;特征工程2&#xff09;后处理&#xff1a;模型选择和模型评估 3、…

Excel基础(详细篇):总结易忽视的知识点,有用的细节操作

目录 写在前面基础篇Excel主要功能必会快捷键快捷键整理表LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式…

Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论&#xff1a; 本章是MySQL篇中&#xff0c;非常实用性的篇章&#xff0c;相信在实际工作中对于表的查询&#xff0c;很多时候会涉及多表的查询&#xff0c;在多表查询的…

非平稳时间序列分析(三)——季节模型(SARIMA、STL、Holt-Winters)

此前篇章&#xff08;平稳序列&#xff09;&#xff1a; 时间序列分析&#xff08;一&#xff09;——基础概念篇 时间序列分析&#xff08;二&#xff09;——平稳性检验 时间序列分析&#xff08;三&#xff09;——白噪声检验 时间序列分析&#xff08;四&#xff09;—…

【web前端开发】CSS--CSS简介及其编写位置(上)

1、CSS简介 &#xff08;1&#xff09;CSS的全称为&#xff1a;层叠式样式表&#xff08;Cascading Style Sheets&#xff09; &#xff08;2&#xff09;CSS也是一种标记语言&#xff0c;用于给HTML结构设置样式&#xff0c;例如&#xff1a;文字大小、颜色、元素宽度等等…

云原生时代的技术桥梁

在数字化转型的大潮中&#xff0c;企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享&#xff0c;也影响了企业对外部市场变化的响应速度。当前&#xff0c;这一转型过程从IT角度来看&#xff0c;已然迈入云原生时…

【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分

文章目录 &#x1f967;栈的初步理解&#xff1a;&#x1f967;易错&#xff1a;如何判断栈满&#x1f967;栈满理解&#x1f967;栈的基本运算&#x1f4da;栈操作的伪代码逻辑&#xff08;顺序和链栈&#xff09;&#x1f4d5;顺序栈运算实现&#xff1a;顺序栈的表示&#x…

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点&#xff1a; 容器&#xff1a;Docker 使用容器来封装应用程序及其依赖项&#xff0c;使其能够在任何环境中都能…

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装&#xff08;七&#xff09;&#xff1a;Anaconda3 打开Anaconda官网&#xff0c;在右侧处填写邮箱&#xff08;要真实有效&#xff01;&#xff09;&#xff0c;然后Submit。会出现如图示的Success界面。 进入填写的邮箱&#xff0c;有一封Ana…

文件上传漏洞:upload-labs靶场11-20

目录 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-11 分析源代码 &#xff0c;发现上传文件的存放路径可控 if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],st…

HTTP协议(20250305)

1. 万维网 WWW(World Wide Web)世界范围内的&#xff0c;联机式的信息储藏所&#xff0c;万维网解决了获取互联网上的数据时需要解决的以下问题&#xff1a; 怎样标识分布在整个互联网上的文档 URL用什么样的协议实现万维网上的各种链接 HTTP怎么使用户能够方便的查看文档数…