QT QMap介绍与使用

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

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

1. 基本应用

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

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

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

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

2. 对象的使用

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

 

#include <qstring.h> 
#include <qmap.h> 
#include <qstring.h> 
 
//自定义一个Employee类,包含fn、sn、sal属性  
class Employee  
{  
public:  
    Employee(): sn(0) {}  
    Employee( const QString& forename, const QString& surname, int salary )  
        : fn(forename), sn(surname), sal(salary)  
    { }  
 
    QString forename() const { return fn; }  
    QString surname() const { return sn; }  
    int salary() const { return sal; }  
    void setSalary( int salary ) { sal = salary; }  
 
private:  
    QString fn;  
    QString sn;  
    int sal;  
};  
 
int main(int argc, char **argv)  
{  
    QApplication app( argc, argv );  
 
    typedef QMap<QString, Employee> EmployeeMap; //自定义一个map类型,值为EmployeeMap对象  
    EmployeeMap map;  
 
    map["JD001"] = Employee("John", "Doe", 50000); //向map里插入键-值  
    map["JW002"] = Employee("Jane", "Williams", 80000);  
    map["TJ001"] = Employee("Tom", "Jones", 60000);  
 
    Employee sasha( "Sasha", "Hind", 50000 );  
    map["SH001"] = sasha;  
    sasha.setSalary( 40000 ); //修改map值的内容,因为map采用值传递,所以无效  
 
    //批量打印  
    EmployeeMap::Iterator it;  
    for ( it = map.begin(); it != map.end(); ++it ) {  
        printf( "%s: %s, %s earns %d\n",  
                it.key().latin1(),  
                it.data().surname().latin1(),  
                it.data().forename().latin1(),  
                it.data().salary() );  
    }  
    return 0;  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
Program output:   
JD001: Doe, John earns 50000  
JW002: Williams, Jane earns 80000  
SH001: Hind, Sasha earns 50000  
TJ001: Jones, Tom earns 60000 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

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

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-16 10:22:24

Qt QHash QMap

2021-06-30 07:19:36

Netty简单使用

2012-04-19 13:55:19

TitaniumTiMVC

2011-06-30 18:15:36

Qt 线程 同步

2011-06-29 15:02:25

Qt 模板库

2011-08-29 10:22:48

QtWebkit 模块HTML文档

2011-06-22 17:09:50

QT 进程 通信

2011-06-30 14:04:41

Qt IP地址 接口

2011-06-20 11:14:09

Qt QxtGlobalS 热键

2011-06-24 10:05:51

QT 对象 父对象

2012-02-23 10:28:12

MySQL

2021-05-06 21:26:00

BcacheCeph存储

2011-06-29 14:56:28

Qt Creator 快捷捷

2011-08-29 10:34:36

QTQWebKitJavaScript

2009-12-18 13:43:22

2011-06-14 14:41:14

Python Qt

2011-07-01 16:04:45

Qt Python

2011-03-23 10:15:43

Opera 11.10

2022-05-22 09:48:47

微服务Sentinel

2011-09-01 15:10:22

Qt数据库SQL
点赞
收藏

51CTO技术栈公众号