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

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

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

相关文章

测试用例总结

一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件&#xff1b;    6、测试输入&#xff1b;    7、操作步骤&#xff1b;    8、预期输出 二、具体分析通…

不用写代码,批量下载今日头条文章导出excel和pdf

前几天有人问我怎么批量抓取今日头条某个号的所有文章数据&#xff0c;需要文章链接&#xff0c;标题和时间&#xff0c;但是不会写代码&#xff0c;于是我写了个简单的教程 这里以渤海小吏为例 首先用edge浏览器安装web-scraper浏览器扩展 然后打开浏览器控制台&#xff0c;找…

Starrocks 写入报错 primary key memory usage exceeds the limit

背景 本文基于 StarRocks 3.3.5 单个Starrocks BE配置是 16CU 32GB 在Flink Yaml CDC 任务往 Starrocks写数据的过程中&#xff0c;突然遇到了primary key memory usage exceeds the limit 问题&#xff0c;具体如下&#xff1a; java.lang.RuntimeException: com.starrocks.…

Django:文件上传时报错in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.

即&#xff1a;使用Content-Security-Policy 1.安装Django CSP中间件&#xff1a; pip install django-csp 2.更改项目配置&#xff1a; # settings.py MIDDLEWARE [...csp.middleware.CSPMiddleware,... ]CSP_DEFAULT_SRC ("self",) CSP_FRAME_ANCESTORS (&q…

利用Adobe Acrobat 实现PPT中图片分辨率的提升

1. 下载适用于 Windows 的 64 位 Acrobat 注册方式参考&#xff1a;https://ca.whu.edu.cn/knowledge.html?type1 2. 将ppt中需要提高分辨率的图片复制粘贴到新建的pptx问价中&#xff0c;然后执行“文件—>导出---->创建PDF、XPS文档” 3. 我们会发现保存下来的distrib…

【Python爬虫】爬取公共交通路网数据

程序来自于Github&#xff0c;以下这篇博客作为完整的学习记录&#xff0c;也callback上一篇爬取公共交通站点的博文。 Bardbo/get_bus_lines_and_stations_data_from_gaode: 这个项目是基于高德开放平台和公交网获取公交线路及站点数据&#xff0c;并生成shp文件&#xff0c;…

Stable Diffusion模型高清算法模型类详解

Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4&#xff0c;分块尺寸768px★★★★★☆皮肤纹理细腻&#xff0c;但高对比场景易出现…

VUE_使用Vite构建vue项目

创建项目 // 安装vite npm install vite// 创建名为vite-app的项目 npm create vite vite-app --template vue// 到项目目录 cd vite-app// 安装依赖 npm install// 运行项目 npm run dev// 打包 npm run build// 打包预览 npm run serve 增加路由 // 安装路由 npm add vue-r…

ctf网络安全赛题

CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展…

【朝夕教育】《鸿蒙原生应用开发从零基础到多实战》004-TypeScript 中的泛型

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…

性能测试监控工具jmeter+grafana

1、什么是性能测试监控体系&#xff1f; 为什么要有监控体系&#xff1f; 原因&#xff1a; 1、项目-日益复杂&#xff08;内部除了代码外&#xff0c;还有中间件&#xff0c;数据库&#xff09; 2、一个系统&#xff0c;背后可能有多个软/硬件组合支撑&#xff0c;影响性能的因…

互联网时代如何保证数字足迹的安全,以防个人信息泄露?

用户在网络上所做的几乎所有事情&#xff0c;包括浏览、社交媒体活动、搜索查询、在线订阅&#xff0c;甚至购物&#xff0c;都会留下一条数据线索&#xff0c;这些数据可用于创建用户在线身份的详细档案。如果这些信息暴露&#xff0c;恶意行为者可能会利用它们将用户置于各种…

C# IEquatable<T> 使用详解

总目录 前言 在 C# 开发中&#xff0c;IEquatable<T> 是一个泛型接口&#xff0c;用于定义类型的相等性比较逻辑。通过实现 IEquatable<T>&#xff0c;可以为自定义类型提供高效的、类型安全的相等性比较方法。本文将详细介绍 IEquatable<T> 的使用方法、应…

web第四天

Dom操作元素 innerText、innerHTML、value(input and textarea用到) 更改属性&#xff0c;样式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

LabVIEW基于IMAQ实现直线边缘检测

本程序基于 NI Vision Development 模块&#xff0c;通过 IMAQ Find Straight Edges 函数&#xff0c;在指定 ROI&#xff08;感兴趣区域&#xff09; 内检测多条直线边缘。用户可 动态调整检测参数 或 自定义ROI&#xff0c;实时观察识别效果&#xff0c;适用于 高精度视觉检测…

费曼学习法13 - 数据表格的魔法:Python Pandas DataFrame 详解 (Pandas 基础篇)

第二篇&#xff1a;数据表格的魔法&#xff1a;Python Pandas DataFrame 详解 (Pandas 基础篇) 开篇提问&#xff1a; 回忆一下&#xff0c;我们上一篇文章学习了 Pandas 的一维数据结构 Series&#xff0c;它可以看作是带 “标签” 的列表。 但现实世界中的数据&#xff0c;…

一周学会Flask3 Python Web开发-在模板中渲染WTForms表单视图函数里获取表单数据

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 为了能够在模板中渲染表单&#xff0c;我们需要把表单类实例传入模板。首先在视图函数里实例化表单类LoginForm&#xff0c;然…

小红书湖仓架构的跃迁之路

作者&#xff1a;李鹏霖(丁典)&#xff0c;小红书-研发工程师&#xff0c;StarRocks Contributor & Apache Impala Committer 本文整理自小红书工程师在 StarRocks 年度峰会上的分享&#xff0c;介绍了小红书自助分析平台中&#xff0c;StarRocks 与 Iceberg 结合后&#x…

数据结构第五节:排序

1.常见的排序算法 插入排序&#xff1a;直接插入排序、希尔排序 选择排序&#xff1a;直接选择排序、堆排序 交换排序&#xff1a;冒泡排序、快速排序 归并排序&#xff1a;归并排序 排序的接口实现&#xff1a; // 1. 直接插入排序 void InsertSort(int* a, int n); // 2. 希…

BambuStudio学习笔记:FaceDetector类

面检测器类解析 这段代码定义了一个名为 FaceDetector 的 C 类&#xff0c;用于处理三维模型中的面检测。以下是该类的具体说明&#xff1a; 头文件保护 #ifndef slic3r_FaceDetector_hpp_ #define slic3r_FaceDetector_hpp_这部分代码防止头文件被多次包含。 命名空间声明…