首页 > 其他分享 >QMap使用

QMap使用

时间:2024-07-16 10:31:18浏览次数:9  
标签:map QMap iterator insert 使用 qDebug 100 Math

1. 实例化QMap对象

/* 创建QMap实例, 第一个参数为QString类型的键,第二个参数为int类型的值 */
QMap<QString, int> map;

2. 插入数据

/* 插入数据 两种方式*/
map["math"] = 100;
map.insert("English", 99); //推荐
打印输出: QMap((“English”, 99)(“math”, 100))

3. 移除数据

/* 移除数据 */
map.remove("math");//打印输出:QMap((“English”, 99))

4. 遍历数据

/* 遍历数据 (先随便插入几个)*/
map.insert("Math", 100);
map.insert("Chinese", 98);
map.insert("physical", 97);
map.insert("chemical", 96);
map.insert("biological", 95);
/* 遍历数据要使用迭代器,QT提供了两种方式的迭代 */
/* 第一种是Java类型的迭代 */
QMapIterator<QString, int> iterator(map);
while (iterator.hasNext()) {
    iterator.next();
    qDebug() << iterator.key() << ":" << iterator.value();
}

/* 第二种是STL类型的迭代 */
QMap<QString, int>::const_iterator iterator_1 = map.constBegin();
while (iterator_1 != map.constEnd()) {
    qDebug() << iterator_1.key() << ":" << iterator_1.value();
    ++iterator_1;
}
for (QMap<QString, int>::const_iterator it = map.constBegin(); it != map.constEnd(); it++) {
    qDebug() << it.key() << ": " << it.value();
}

打印输出:两种方法输出一样
“Chinese” : 98
“English” : 99
“Math” : 100
“biological” : 95
“chemical” : 96
“physical” : 97

5. 由键查找对应键值

map.value("Math");//打印输出:100

6. 由键值查找键

QString k = map.key(100);
qDebug() << k;//打印输出:“Math”

7. 修改键值

/* 通常一个键只对应一个值,如果再次调用insert()方法,会覆盖以前的值 */
map.insert("Math", 120);
qDebug() << map.value("Math");//打印输出:120

8. 查找是否包含某个键

bool isok = map.contains("Math");
qDebug() << isok;//打印输出:true

9. 获取所有的键和键值

QList<QString> allKeys = map.keys();
qDebug() << allKeys;
QList<int> allValues = map.values();
qDebug() << allValues;
/*打印输出:
(“Chinese”, “English”, “Math”, “biological”, “chemical”, “physical”)
(98, 99, 120, 95, 96, 97)*/

10. 清除数据

map.clear();
qDebug() << map.isEmpty();//打印输出:true

11. 一个键对应多个值

方式一:通过insertMulti方法

/* 通过insert方法进行插值会覆盖以前的值,但是通过insertMulti方法不会覆盖,而是会增加一对 */
map.insert("Math", 100);
map.insertMulti("Math", 150);
qDebug() << map.value("Math");
qDebug() << map.values("Math");/* 获取Math所有键值 */

/* 查看当前键和键值的数量 */
qDebug() << map.keys().size();
qDebug() << map.values().size();
打印输出:150
(150, 100)
2 \color{#FF0000}{2}2

总结:通过insertMulti方法可以使得一个键对应多个键值,通过value获取其最后一次插入得键值,通过values获取其所有键值。

注意:这一点与STL中得map不同,在STL中,map对象是不允许有多个相同键的

/* 这是STL测试用例 */

#include <iostream>
#include <map>
#include <string>

using namespace std;
int main()
{
    map<string, int> mp;
    mp.insert(pair<string, int>("Math", 100));
    /* 再次插入一个键为"Math"的map */
    mp.insert(make_pair("Math",120));

    for(map<string, int>::iterator it = mp.begin(); it != mp.end(); it++)
    {
        cout << "key = " << it->first << " value: " << it->second << endl;
    }
    return 0;
}


打印输出:key = Math value: 100

虽然插入了两次,但是因为都是同一个键,故第二次插入无效。

方式二:通过QMultiMap类

map.insert("Math", 100);
map.insertMulti("Math", 150);
map.insertMulti("Math", 120);
qDebug() << map.values("Math");
QMultiMap<QString, int> multiMap;
multiMap.insert("Math", 100);
multiMap.insert("Math", 90);
multiMap.insert("Math", 80);
qDebug() << multiMap.values("Math");

打印输出:

(120, 150, 100)
(80, 90, 100)

两种方法效果是一样的。

QMultiMap遍历数据

    /* 遍历全部 */
for (QMultiMap<QString, int>::iterator it = multiMap.begin(); it != multiMap.end(); it++) {
    qDebug() << it.key() << ": " << it.value();
}
    /* 只遍历指定键 */
for (QMultiMap<QString, int>::iterator it = multiMap.find("Math"); it != multiMap.end(); it++) {
    qDebug() << it.key() << ": " << it.value();
}

标签:map,QMap,iterator,insert,使用,qDebug,100,Math
From: https://www.cnblogs.com/checha/p/18304663

相关文章

  • Excel 学习手册 - 精进版(包括各类复杂函数及其嵌套使用)
    作为程序员从未想过要去精进一下Excel办公软件的使用方法,以前用到某功能都是直接百度,最近这两天跟着哔哩哔哩上的戴戴戴师兄把Excel由里到外学了一遍,收获良多。程序员要想掌握这些内容可以说是手拿把掐,对后续Excel的运用也会有非常好的效果,在处理数据时,比起现写一些一次......
  • 一起学Hugging Face Transformers(18) - 使用Transformers 库实现命名实体识别(NER)
    文章目录前言1.环境配置2.加载模型和分词器3.创建命名实体识别管道4.输入文本进行识别5.完整代码示例6.结果解释总结前言命名实体识别(NER)是自然语言处理(NLP)中的一种任务,旨在识别文本中具有特定意义的实体,例如人名、地名、组织名等。NER在信息抽取、文本分析......
  • 邮件发送与使用thymeleaf引擎重置密码邮件
    邮件发送原生java-mail进行邮件发送;前提:先登录邮箱,开启POP3/SMTP服务,使第三方可以使用授权码登录邮箱。@TestpublicvoidsendEmail(){Stringaccount="[email protected]";Stringpwd="KXNZHOZDMLTVWHOZ";//设置SMTP请求头Pr......
  • 木舟0基础学习Java的第十七天(File类使用,IO流)
     File类(路径):文件路径文件夹路径路径:1.绝对路径:固定的路径从盘符开始2.相对路径:相对于某个位置指当前项目下创建功能:Filef=newFile("e:/a.txt");try{booleanb1=f.createNewFile();//新建文件System.out.println(b1);......
  • 在MoneyPrinterPlus中使用本地chatTTS语音模型
    之前MoneyPrinterPlus在批量混剪,一键AI生成视频这些功能上的语音合成功能都用的是云厂商的语音服务,比阿里云,腾讯云和微软云。云厂商虽然提供了优质的语音服务,但是用起来还是要收费。为了各位小伙伴的钱包,现在特意给MoneyPrinterPlus上线了本地chatTTS语音服务。赶紧来体验吧。......
  • 使用 CSS 实现透明效果
    使用CSS实现透明效果在CSS中,实现透明效果有几种方法,具体使用哪种方法取决于具体需求。以下是一些常见的方法:使用opacity属性:opacity属性可以设置整个元素的透明度,包括其所有的子元素。.transparent{opacity:0.5;/*0表示完全透明,1表示完全不透明*/}使......
  • 【人工智能大模型】文心一言介绍以及基本使用指令
    目录一、产品背景与技术基础二、主要功能与特点基本用法指令的使用注意事项文心一言(ERNIEBot)是百度基于其文心大模型技术推出的生成式AI产品。以下是对文心一言的详细介绍:一、产品背景与技术基础技术背景:百度在人工智能领域深耕十余年,拥有产业级知识增强文心大模型E......
  • 关于docker使用中的问题
    问题:今天发现一个服务报503,得知这个服务使用docker部署,部署在了test环境服务器中,开始排查: 1.dockerps-a看了一下容器还在,状态正常。2.dockerlogs-f容器名确认的日志也是正常的。但容器是另一个别的服务的,下图所示,我的服务是op这个服务叫mini 3.查了一下op服务的Do......
  • 科研单位如何安全又高效地使用文件摆渡U盘?
    科研单位是专门从事科学研究与技术开发工作的机构,通常拥有高水平的科研团队和先进的科研设备。这些机构按照属性可以分为中央直属科研单位和地方科研单位。中央直属科研单位包括中国科学院、中国工程院等机构,以及原国家部委附属的科研单位、国家“211”和“985”高校及其所管辖的......
  • 侠之道风灵月影修改器详尽指南——掌握使用技巧与提升游戏体验
    《侠之道》是一款深受玩家喜爱的武侠题材游戏,其复杂的策略战斗系统和丰富的剧情线吸引了无数玩家。然而,对于那些想要更深入探索游戏内容,或是希望调整游戏难度以适应个人游戏风格的玩家来说,使用修改器是一种常见的做法。本文将详细介绍《侠之道》风灵月影修改器的使用方法,并分享......