QT QMap介绍与使用「建议收藏」

QT QMap介绍与使用「建议收藏」Qt中的QMap介绍与使用,在坛子里逛了一圈,发现在使用QMap中,出现过很多的问题,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。说明:map是以值传递的形式保存数据的。1.基本应用下面以“键-值”都是QString的例子说明QMa

大家好,又见面了,我是你们的朋友全栈君。

Qt中的QMap介绍与使用,在坛子里逛了一圈,发现在使用QMap中,出现过很多的问题,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。在使用的时候,通过提供字符标示(键)即可得到想要的数据。这个“数据”即可以是一个字符串,也可以是任意对象,当然也包括自己定义的类对象。说明:map是以值传递的形式保存数据的。

1. 基本应用

下面以“键-值”都是QString的例子说明QMap的基本使用方法。更详细的说明,请查看《Qt帮助手册》或其他资源。

  1. #include <qmap.h> 
  2. #include <iostream> 
  3. using namespace std;  
  4. class MapTest  
  5. {  
  6. public:  
  7.     void showMap()  
  8.     {  
  9. if(!m_map.isEmpty()) return; //判断map是否为空  
  10. m_map.insert("111", "aaa"); //向map里添加一对“键-值”  
  11. if(!m_map.contains("222")) //判断map里是否已经包含某“键-值”  
  12.      m_map.insert("222", "bbb");  
  13. m_map["333"] = "ccc"; //另一种添加的方式  
  14. qDebug("map[333] , value is : " + m_map["333"]); //这种方式既可以用于添加,也可以用于获取,但是你必须知道它确实存在  
  15.  
  16. if(m_map.contains("111")){  
  17.      QMap<QString,QString>::iterator it = m_map.find("111"); //找到特定的“键-值”对  
  18.      qDebug("find 111 , value is : " + it.data()); //获取map里对应的值  
  19. }  
  20. cout<< endl;  
  21. qDebug("size of this map is : %d", m_map.count()); //获取map包含的总数  
  22. cout<< endl;  
  23. QMap<QString,QString>::iterator it; //遍历map  
  24. for ( it = m_map.begin(); it != m_map.end(); ++it ) {  
  25.             qDebug( "%s: %s", it.key().ascii(), it.data().ascii()); //用key()和data()分别获取“键”和“值”  
  26.         }  
  27.  
  28. m_map.clear(); //清空map  
  29.     }  
  30. private:  
  31.     QMap<QString,QString> m_map; //定义一个QMap对象  
  32. }; 

调用类函数showMap(),显示结果:

  1. map[333] , value is : ccc  
  2. find 111 , value is : aaa  
  3. size of this map is : 3  
  4. 111: aaa  
  5. 222: bbb  
  6. 333: ccc 

2. 对象的使用

map当中还可以保存类对象、自己定义类对象,例子如下(摘自QT帮助文档《Qt Assistant》,更详细的说明参考之):
以注释形式说明

   
  1. #include <qstring.h> 
  2. #include <qmap.h> 
  3. #include <qstring.h> 
  4.  
  5. //自定义一个Employee类,包含fn、sn、sal属性  
  6. class Employee  
  7. {  
  8. public:  
  9.     Employee(): sn(0) {}  
  10.     Employee( const QString& forename, const QString& surname, int salary )  
  11.         : fn(forename), sn(surname), sal(salary)  
  12.     { }  
  13.  
  14.     QString forename() const { return fn; }  
  15.     QString surname() const { return sn; }  
  16.     int salary() const { return sal; }  
  17.     void setSalary( int salary ) { sal = salary; }  
  18.  
  19. private:  
  20.     QString fn;  
  21.     QString sn;  
  22.     int sal;  
  23. };  
  24.  
  25. int main(int argc, char **argv)  
  26. {  
  27.     QApplication app( argc, argv );  
  28.  
  29.     typedef QMap<QString, Employee> EmployeeMap; //自定义一个map类型,值为EmployeeMap对象  
  30.     EmployeeMap map;  
  31.  
  32.     map["JD001"] = Employee("John", "Doe", 50000); //向map里插入键-值  
  33.     map["JW002"] = Employee("Jane", "Williams", 80000);  
  34.     map["TJ001"] = Employee("Tom", "Jones", 60000);  
  35.  
  36.     Employee sasha( "Sasha", "Hind", 50000 );  
  37.     map["SH001"] = sasha;  
  38.     sasha.setSalary( 40000 ); //修改map值的内容,因为map采用值传递,所以无效  
  39.  
  40.     //批量打印  
  41.     EmployeeMap::Iterator it;  
  42.     for ( it = map.begin(); it != map.end(); ++it ) {  
  43.         printf( "%s: %s, %s earns %d\n",  
  44.                 it.key().latin1(),  
  45.                 it.data().surname().latin1(),  
  46.                 it.data().forename().latin1(),  
  47.                 it.data().salary() );  
  48.     }  
  49.     return 0;  
   
  1. Program output:   
  2. JD001: Doe, John earns 50000  
  3. JW002: Williams, Jane earns 80000  
  4. SH001: Hind, Sasha earns 50000  
  5. TJ001: Jones, Tom earns 60000 

小结:QMap介绍与使用的内容介绍完了,基本是在讲QMap的使用,那么通过本文希望你能了解更多关于QMap的知识。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139225.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java继承的概念及方法

    Java继承的概念及方法继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。生活中的继承:兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。所以继承需要符合的关系是:

  • 表单构建html的页面代码,网页设计表单制作代码 制作一个很简单网页表单代码…

    表单构建html的页面代码,网页设计表单制作代码 制作一个很简单网页表单代码…CSS布局HTML小编今天和大家分享以下网页设计表格html代码CSS布局HTML小编今天和大家分享以下网页设计表格html代码急急急,下午要交作业了,编码大神救救我代码(大小有需要可以调):练习使用HTML运行效果:HTML5网页前端设计中如下图表单的代码怎么写?下面是表单代码,你直接再加属性就可以了,表单用table写比较简单,div太麻烦了;黑板用户注册页面用户名:密码:…

  • OC中语法糖,最新语法总结

    OC中语法糖,最新语法总结

  • 常见分布式id生成方案_分布式id生成方案

    常见分布式id生成方案_分布式id生成方案文章目录一、为什么要用分布式ID1、什么是分布式ID2、那么分布式ID需要满足哪些条件二、分布式ID有哪些生成方式1、基于UUID2、基于数据库自增ID3、基于数据库集群模式4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法(Snowflake)模式7、百度(uid-generator)8、美团(Leaf)号段模式snowflake模式9、滴滴(Tinyid)Http方式接入Java客户端方式接入三、总结一、为什么要用分布式ID在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式

    2022年10月25日
  • safari每次打开都是上次未关闭页面_页码一直不变怎么改

    safari每次打开都是上次未关闭页面_页码一直不变怎么改bootstrapTable刷新当前页码不变和从第一页开始查询

  • Symantec 卸载密码方法

    Symantec 卸载密码方法Symantec卸载密码方法最的有很多朋友问…方法一:当时就是输入在服务器端设置的密码(诺顿的默认密码是symantec)方法二:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk\VirusProtect6CurrentVersion\AdministratorOnly\Security修改UseV…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号