Qt 2 QMapQHashQVector类实例

1. QMap

   // 1:QMap的使用
    // 创建一个QMap 实例 key 为 QString value 为 int
    QMap<QString,int> Grade;
    // 插入方式有两种插入方式
    // 1.map[key] = value
    Grade["语文"] = 90;
    Grade["数学"] = 120;
    // 2.map.insert(key,value);
    Grade.insert("英语",89);
    // 删除key
    Grade.remove("语文");
    qDebug() << Grade ;
    // 普通打印
    qDebug() << Grade ;
    // 循环打印Map
    // 1.通过迭代器实现 (java类型实现)
    QMapIterator<QString,int> itr(Grade);
    // while循环输出
    while (itr.hasNext())
    {
        itr.next();
        qDebug() << itr.key() << itr.value();
    }
    qDebug() << endl;
    // 2.STL类型迭代器
    QMap<QString,int>::const_iterator stl_itr = Grade.constBegin();

    while(stl_itr != Grade.constEnd())
    {
        qDebug() << stl_itr.key() << stl_itr.value();
        stl_itr++;
    }

    // 在QMap中查找

    // 根据KEY 查找对应的值
    //1.
    qDebug() << Grade["数学"] <<endl;
    //2.
    qDebug() << Grade.value("数学") <<endl;

    // 根据值来查找Key
    qDebug() << Grade.key(120);


    // 修改键值
    // 一个键对应一个值,调用insert 将覆盖原有的键
    Grade.insert("英语",118);
    qDebug() << Grade.value("英语") <<endl;

    // 判断键是否存在?
    qDebug() << Grade.contains("数学") <<endl;

    // 输出Qmap对象的键和值
    QList<QString> Keys = Grade.keys();
    QList<int> Values = Grade.values();
    qDebug() << "key: " << Keys;
    qDebug() << "value: " << Values;

    // 一个键对应多个值 QMultiMap 类
    QMultiMap<QString,QString> MultiMap;
    MultiMap.insert("stu","id");
    MultiMap.insert("stu","name");
    MultiMap.insert("stu","grade");
    MultiMap.insert("stu","sex");
    MultiMap.insert("stu","age");

qDebug() << MultiMap;

2. QHash

QHash<Key,T>具有与 QMap ,几乎完全相同的 API.QHash 维护着一张哈希表(Hash Table),哈希表的大小与 QHash 的数据项的数目相适应。QHash 以任意的顺序组织它的数据。当存储数据的顺序无关紧要时,建议使用 QHash 作为存放数据的容器。

QMap 与 QHash 区别:QHash 与 QMap,的功能差不多,但 QHash 的查找速度更快;QMap,是按照键的顺序存储数据,而 QHash ,是任意顺序存储的QMap,的键必须提供"<”运算符,而 QHash的键必须提供“=="运算符和个名为 gHash0的全局散列函数,

 // QHash类
    QHash<QString,int> Hash;
    Hash["key 1"] = 3;
    Hash["key 1"] = 8;
    Hash["key 4"] = 9;
    Hash["key 2"] = 1;

    // 插入hash数据
    Hash.insert("key 3",30);

    // 获取键列表
    QList<QString> key_list = Hash.keys();

    // 循环打印
    for (int var = 0; var < key_list.length(); var++) {
        qDebug() << key_list[var] << "," << Hash[key_list[var]] <<endl;
    }

    // QHash内部的迭代器 QHashIterator 用法与 QMapIterator 一样

    QHash<QString,int> hash;
    hash["key 1"] = 3;
    hash["key 1"] = 8;
    hash["key 4"] = 9;
    hash["key 2"] = 1;

    QHash<QString,int>::const_iterator itr;

    for (itr=hash.begin(); itr!=hash.end(); itr++)
    {
        qDebug() << itr.key() << ":" << itr.value() << endl;
    }

3. QVector

QVector在相邻的内存当中存储给定数据类型T的一组数值。在一个QVector,的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由 QVector 存储数据的方式决定的。

// QVector类
    // QVector<T> 是QT的一个容器类
    QVector<int> qvr;
    // QVector存储的第一种方式
    qvr << 10;
    qvr << 20;
    qvr << 30;
    // 第二种
    qvr.append(50);
    qvr.append(60);
    qvr.append(70);

    qDebug() << qvr << endl;

    // 查看QVector中的元素的个数
    qDebug() << qvr.count() << endl;

    // 删除Qvector中的元素
    qvr.remove(0);
    // 循环打印
    for (int i = 0; i < qvr.count(); i++) {
        qDebug() << qvr[i] << endl;
    }

    qDebug() << endl;
    // 从第二个元素开始 删除后面三个元素
    qvr.remove(2,3);
    // 循环打印
    for (int i = 0; i < qvr.count(); i++) {
            qDebug() << qvr[i] << endl;
    }

    // 判断是否包含元素 QVector::contains() -> bool

    qDebug() << qvr.contains(40) << endl;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS学习 -- 中断配置

一、什么是中断 中断时微控制器一个很常见的特性&#xff0c;中断是由硬件产生&#xff0c;当中断产生以后CPU就会中断当前的流程而去处理中断服务&#xff0c;Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器&#xff08;NVIC&#xff09;。 二、中断优先级分…

区块链安全应用----压力测试

通过Caliper进行压力测试程序 1.环境配置 第一步. 配置基本环境 部署Caliper的计算机需要有外网权限&#xff1b;操作系统版本需要满足以下要求&#xff1a;Ubuntu > 16.04、CentOS > 7或MacOS > 10.14&#xff1b;部署Caliper的计算机需要安装有以下软件&#xff…

作业4.17

1.总结串口的发送和接收功能使用到的函数 发送&#xff1a; HAL_StatusTypeDef HAL_UART_Transmit( UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout ) 接受&#xff1a; HAL_StatusTypeDef HAL_UART_Receive_IT( UART_HandleTypeDef *…

刀具表面上的微结构

刀具表面微结构通常指在刀具表面对特定功能设计的微观纹理&#xff0c;这些纹理可以是沟槽、凹坑、凸起或任何其他形式的微观图案。这些微结构的设计和应用是为了改善刀具的切削性能&#xff0c;减少切削力和切削温度&#xff0c;提高切削效率和精度&#xff0c;同时降低切削液…

Sa-Token使用经验

官方文档;Sa-Token Sa-Token 介绍 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分…

第十六篇:springboot案例

文章目录 一、准备工作1.1 需求说明1.2 环境搭建1.3 开发规范1.4 思路 二、部门管理2.1 查询部门2.2 删除部门2.3 新增部门2.4 修改部门2.5 RequestMapping 三、员工管理3.1 分页查询3.2 删除员工3.3 新增员工3.3.1 新增员工3.3.2 文件上传 3.4 修改员工3.4.1 页面回显3.4.2 修…

C++ stl容器list的底层模拟实现

目录 前言&#xff1a; 1.创建节点 2.普通迭代器的封装 3.反向迭代器的封装 为什么要对正向迭代器进行封装&#xff1f; 4.const迭代器 5.构造函数 6.拷贝构造 7.赋值重载 8.insert 9.erase 10.析构 11.头插头删&#xff0c;尾插尾删 12.完整代码简单测试 总结&…

刀具刃口钝化

​刀具刃口钝化是指在刀具制作过程中&#xff0c;通过一系列的加工步骤使刀具刃口表面变得光滑、平整&#xff0c;去除因磨削加工造成的微观缺口&#xff0c;以提高刀具的切削性能和寿命。这一过程对于保障刀具的稳定性和精度至关重要&#xff0c;尤其是在高速切削和高精度加工…

Leetcode刷题之合并两个有序数组

Leetcode刷题之合并两个有序数组 一、题目描述二、题目解析 一、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数…

一夜爆红的4款国产软件,却一度被大众误以为是外国人开发

在现今高度信息化的时代&#xff0c;计算机已经深深地渗透到了我们生活的每一个角落。 从日常的办公学习到娱乐休闲&#xff0c;几乎都离不开计算机技术的支持。而在这背后&#xff0c;软件作为计算机的灵魂&#xff0c;其发展历史可谓波澜壮阔。 中国软件产业经过多年的积累和…

【UE 材质】一些使用外部数据的节点的简单介绍

目录 一、ActorPosition 二、绝对世界位置 三、“CameraVector”与“ReflectionVector” 四、PixelDepth 一、ActorPosition 介绍 用于获取Actor在世界场景中的位置信息 应用举例 我们可以通过“ActorPosition”“Mask&#xff08;B&#xff09;”来获取Actor在Z轴上的位…

Vue项目管理器创建项目

黑马程序员JavaWeb开发教程 文章目录 1、创建新项目2、详情3、预设4、功能5、配置6、是否保存为预设模板7、正在创建项目8、创建完成 1、创建新项目 2、详情 3、预设 选择手动&#xff0c;点击下一步 4、功能 只需要额外选择一项–Router 即可&#xff0c;其余的保持默认&a…

Android Studio修改项目包名

1.第一步&#xff0c;项目结构是这样的&#xff0c;3个包名合在了一起&#xff0c;我们需要把每个包名单独展示出来 2.我们点击这个 取消选中后的包名结构是这样的&#xff0c;可以看到&#xff0c;包名的每个文件夹已经展示分开了&#xff0c;现在我们可以单独对每个包名文件夹…

【重磅】2024大模型应用研究与案例报告合集(共18份)

文末领取福利&#xff0c;扫描进群获取&#xff01;&#xff01;&#xff01; 2024工业大模型应用报告.pdf 2024大语言模型能力测评报告.pdf 2024大模型落地应用案例集.pdf 2023中文大模型基准测评年度报告.pdf 2023人工智能大模型体验报告3.0.pdf 2023人工智能大模型体验报告…

Python文件操作大全

1 文件操作 1.1 文件打开与关闭 1.1.1 打开文件 在Python中&#xff0c;你可以使用 open() 函数来打开文件。以下是一个简单的例子&#xff1a; # 打开文件&#xff08;默认为只读模式&#xff09; file_path example.txt with open(file_path, r) as file:# 执行文件操作…

网络编程(现在不重要)

目录 网络编程三要素与InetAddress类的使用 软件架构 面临的主要问题 网络编程三要素&#xff08;对应三个问题&#xff09; InetAddress的使用 TCP与UDP协议剖析与TCP编程案例&#xff08;了解&#xff09; TCP协议 UDP协议 例子 UDP、URL网络编程 URL&#xff1a;&…

机器学习引领金融革命:重塑金融服务领域新格局,开启智能化新篇章

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

抖店选品技巧!如何在直播间找到“爆品”?新手必看

哈喽~我是电商月月 说到选品&#xff0c;除了看商品排行榜榜单&#xff0c;还可以去直播间看别人卖的好的商品&#xff0c;我们就跟着上架 但现实就是&#xff0c;如果真的这么简单&#xff0c;就不会有那么多人的店铺因为不怎么出单而放弃开店 其实这个方法确实是对的 但这…

when语法学习及判断主机别名实例

目录 1、概念 2、实例配置 2.1 编写剧本体验when的用法 2.2 执行剧本文件 2.3 使用ansible临时命令进行测试 1、概念 when是用于判断的语法&#xff0c;将其用在每个动作的下方进行判断&#xff0c;使得只有在满足条件才会执行。 2、实例配置-判断主机别名 在每个客户端中…

c语言中声明的问题【求个关注!】

文章目录 1 变量的声明与定义&#xff08;1&#xff09;定义与声明的区别&#xff1a;&#xff08;2&#xff09;为什么要区分定义与声明&#xff1f;&#xff08;3&#xff09;extern是什么 ?&#xff08;4&#xff09;举例&#xff1a; 2 函数的声明&#xff1a;函数声明的格…
最新文章