本文介绍的是QMap介绍与使用,值得一提的问题是QMap的值和键是一对一对的,必须要一对一对的插入。

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

QT QMap介绍与使用(qt qmap用法)  QMap 第1张

1. 基本应用

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

  1. #include<qmap.h>
  2. #include<iostream>
  3. usingnamespacestd;
  4. classMapTest
  5. {
  6. public:
  7. voidshowMap()
  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],valueis:"+m_map["333"]);//这种方式既可以用于添加,也可以用于获取,但是你必须知道它确实存在
  15. if(m_map.contains("111")){
  16. QMap<QString,QString>::iteratorit=m_map.find("111");//找到特定的“键-值”对
  17. qDebug("find111,valueis:"+it.data());//获取map里对应的值
  18. }
  19. cout<<endl;
  20. qDebug("sizeofthismapis:%d",m_map.count());//获取map包含的总数
  21. cout<<endl;
  22. QMap<QString,QString>::iteratorit;//遍历map
  23. for(it=m_map.begin();it!=m_map.end();++it){
  24. qDebug("%s:%s",it.key().ascii(),it.data().ascii());//用key()和data()分别获取“键”和“值”
  25. }
  26. m_map.clear();//清空map
  27. }
  28. private:
  29. QMap<QString,QString>m_map;//定义一个QMap对象
  30. };

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

  1. map[333],valueis:ccc
  2. find111,valueis:aaa
  3. sizeofthismapis: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. //自定义一个Employee类,包含fn、sn、sal属性
  5. classEmployee
  6. {
  7. public:
  8. Employee():sn(0){}
  9. Employee(constQString&forename,constQString&surname,intsalary)
  10. :fn(forename),sn(surname),sal(salary)
  11. {}
  12. QStringforename()const{returnfn;}
  13. QStringsurname()const{returnsn;}
  14. intsalary()const{returnsal;}
  15. voidsetSalary(intsalary){sal=salary;}
  16. private:
  17. QStringfn;
  18. QStringsn;
  19. intsal;
  20. };
  21. intmain(intargc,char**argv)
  22. {
  23. QApplicationapp(argc,argv);
  24. typedefQMap<QString,Employee>EmployeeMap;//自定义一个map类型,值为EmployeeMap对象
  25. EmployeeMapmap;
  26. map["JD001"]=Employee("John","Doe",50000);//向map里插入键-值
  27. map["JW002"]=Employee("Jane","Williams",80000);
  28. map["TJ001"]=Employee("Tom","Jones",60000);
  29. Employeesasha("Sasha","Hind",50000);
  30. map["SH001"]=sasha;
  31. sasha.setSalary(40000);//修改map值的内容,因为map采用值传递,所以无效
  32. //批量打印
  33. EmployeeMap::Iteratorit;
  34. for(it=map.begin();it!=map.end();++it){
  35. printf("%s:%s,%searns%d\n",
  36. it.key().latin1(),
  37. it.data().surname().latin1(),
  38. it.data().forename().latin1(),
  39. it.data().salary());
  40. }
  41. return0;
  42. }
  1. Programoutput:
  2. JD001:Doe,Johnearns50000
  3. JW002:Williams,Janeearns80000
  4. SH001:Hind,Sashaearns50000
  5. TJ001:Jones,Tomearns60000

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

转载请说明出处
知优网 » QT QMap介绍与使用(qt qmap用法)

发表评论

您需要后才能发表评论