QMap的基本使用

来源:互联网 发布:数据挖掘导论 豆瓣 编辑:程序博客网 时间:2024/05/01 08:53

1. 基本应用

下面以“键-值”都是QString的例子说明QMap的基本使用方法。

#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对象};

调用类函数showMap(),显示结果:
map[333] , value is : ccc
find 111 , value is : aaa

size of this map is : 3

111: aaa
222: bbb
333: ccc


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;}

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

0 0
原创粉丝点击