热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QTQMap介绍与使用「建议收藏」

QTQMap介绍与使用「建议收藏」Qt中的QMap介绍与使用,在坛子里逛了一圈,发现在使用QMap中,出现过很多的问题,Map是一个很有用的数据结构。它以“键-值”的形式保存数据。

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的知识。


推荐阅读
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
author-avatar
小太郎在路上_439
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有