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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 首选DNS服务器地址不显示,首选dns服务器如何设置?如何设置DNS地址

    首选DNS服务器地址不显示,首选dns服务器如何设置?如何设置DNS地址首选dns服务器如何设置?如何设置DNS地址分类:云服务资讯编辑:聊聊云计算浏览量:1652021-01-2915:18:29现在有很多朋友对于首选dns服务器的设置方法不是很了解,不知道如何操作,今天新网就给大家详细的介绍下首选dns服务器如何设置以及如何设置DNS地址等问题,希望提供些帮助。首选dns服务器怎么设置?在“开始”中找到“运行”或者直接【Win】+【R】,然后输入“cmd”进入管…

    2022年6月13日
    26
  • 免费的抢小米软件_小米手机自动抢红包软件

    免费的抢小米软件_小米手机自动抢红包软件发现一个免费抢小米的工具。http://liulanqi.baidu.com/

    2025年7月8日
    3
  • MySQL自定义函数实例「建议收藏」

    MySQL自定义函数实例「建议收藏」关于MySQL函数的基本内容,网上有很多的资料,仅在此整理一些有价值的sql实例,以方便自己阅读,见例子便知内容。1.求两点之间的距离?DELIMITER//CREATEFUNCTIONdistance_fn(x1DOUBLE,y1DOUBLE,x2DOUBLE,y2DOUBLE)RETURNSDOUBLEBEGINSET@distanc…

    2022年9月7日
    3
  • java引用变量存放在哪_java成员变量存储在哪个内存区域

    java引用变量存放在哪_java成员变量存储在哪个内存区域我们说常量,静态变量存放在方法区中,方法中的临时变量,存放到Java虚拟栈中。有人问,那全局变量*(对象)存放在哪里.其实全局变量就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)方法区与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。在Class文件中除了类的字段、方法、接…

    2022年8月21日
    44
  • meta标签设置用极速模式打开网页

    meta标签设置用极速模式打开网页1浏览器集成了多种浏览器内核,需要强制使用极速模式<metaname=”renderer”content=”webkit”/>2meta标签中X-UA-Compatible属性的使用的极速模式<metahttp-equiv=”X-UA-Compatible”content=”IE=edge,chrome=1″/>…

    2025年6月13日
    4
  • find 命令的 7 种用法[通俗易懂]

    find 命令的 7 种用法[通俗易懂]首先我们需要使用cd命令进入对应的目录,然后,命令如下:find.-typef-atime+365-execrm-rf{}\;如果你还没有完全理解上面的命令,完全不用担心。本文将介绍find命令的7个实际用途,您最终会掌握它。如果您已经知道了,那么阅读这篇文章对您来说将是一个很好的回顾。0.按名称或正则表达式查找文件让我们从最简单的用法开始。要按特定名称搜索文件,命令如下:find.-nametest.txt如何查找所有格式为pdf…

    2022年10月14日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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