QT QMap介绍与使用

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


1. 基本应用

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

[cpp]  view plain copy
  1. #include    
  2. #include    
  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::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::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 m_map; //定义一个QMap对象    
  32. };   
调用类函数showMap(),显示结果:

[cpp]  view plain copy
  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》,更详细的说明参考之):
以注释形式说明

[cpp]  view plain copy
  1. #include    
  2. #include    
  3. #include    
  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 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;    
  50. }   


Program output:   
JD001: Doe, John earns 50000  
JW002: Williams, Jane earns 80000  
SH001: Hind, Sasha earns 50000  
TJ001: Jones, Tom earns 60000 

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

你可能感兴趣的:(qt)