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

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) {// 修改用户的年龄,每个用户年龄加 1User& 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();//...}
}

相关文章:

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 wi…...

《解锁HarmonyOS NEXT高阶玩法:艺术图像识别功能开发全攻略》

在当今数字化时代&#xff0c;AI技术不断拓展其应用边界&#xff0c;为各行业带来前所未有的变革。在艺术领域&#xff0c;AI图像识别技术能够帮助艺术从业者、爱好者快速识别艺术品风格、作者&#xff0c;甚至挖掘艺术品背后的历史文化信息。本文将结合HarmonyOS NEXT API 12及…...

post get 给后端传参数

post 方式一 &#xff1a; data: params 作为请求体&#xff08;Request Body&#xff09;传递&#xff1a; 你已经展示了这种方式&#xff0c;通过data字段直接传递一个对象或数组。这种方式通常用于传递复杂的数据结构。dowmfrom: function (params) { return request({ u…...

Masscan下载Linux安装

masscan 是一款高速的端口扫描工具&#xff0c;能够在极短的时间内扫描大量IP地址和端口。以下是关于如何在Linux系统上下载并安装 masscan 的详细步骤。 ### 通过包管理器安装 对于一些Linux发行版&#xff0c;你可以直接使用系统的包管理器来安装 masscan。例如&#xff0c…...

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…...

python里调用外部控制台应用程序的方法~

有时候我们需要在python里调用外部控制台应用程序&#xff0c;方法如下: step.1 引用suprocess import subprocess # call an external program in python step.2 比如调用一个叫Audio_status.exe的控制台程序 result subprocess.run(["Au…...

工厂方法模式的C++实现示例

核心思想 工厂方法模式是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但让子类决定实例化哪一个类。工厂方法模式将对象的实例化过程推迟到子类&#xff0c;从而使得子类可以根据需要决定创建哪种对象。 **Product&#xff1a;**定义产品的接口…...

本地部署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…...

如何将JAR交由Systemctl管理?

AI越来越火了&#xff0c;我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站 废话不多说&#xff0c;进入正题。下面开始说如何使用 systemctl…...

六足仿生机器人地形自适应步态规划研究

六足仿生机器人地形自适应步态规划研究 第1章 绪论第2章 机器人系统建模第3章 地形感知与建模第4章 自适应步态生成算法第5章 动力学仿真与实验第6章 驱动代码设计与实现源码&文档链接 第1章 绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.2.1 多足机器人步态规划 1.2.2 …...

决策树(Decision Tree)基础知识

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

【OpenCV C++】以时间命名存图,自动检查存储目录,若不存在自动创建, 按下空格、回车、Q、S自动存图

文章目录 // 保存图像的函数 void saveImage(const cv::Mat& frame) {// 生成唯一文件名auto now = std::chrono::system_clock::...

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

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

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 测试框架的配置文件,它允许你自定义 pytest 的行为。通过在 pytest.ini 中设置各种选项,可以改变测试用例的发现规则、输出格式、插件行为等。以下详细介绍 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于项目的根目录下,pytest 在运…...

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怎么使用户能够方便的查看文档数…...