QMap的使用

转载自:http://blog.csdn.net/stilling2006/article/details/5549309


1. 基本应用

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

#include 
#include 

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::iterator it = m_map.find(“111″);

            //获取map里对应的值
            qDebug(“find 111 , value is : ” + it.data());
        }

        cout<< endl;
        qDebug(“size of this map is : %d”, m_map.count()); //获取map包含的总数
        cout<< endl;

        QMap::iterator it; //遍历map
        for ( it = m_map.begin(); it != m_map.end(); ++it )
        {
            //用key()和data()分别获取“键”和“值”
            qDebug( “%s: %s”, it.key().ascii(), it.data().ascii());
        }
        m_map.clear(); //清空map
    }

private:
    QMap 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 
#include 
#include 

// 自定义一个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:
    int sal;
    QString fn;
    QString sn;
};

int main(int argc, char **argv)
{
    QApplication app( argc, argv );

    // 自定义一个map类型,值为EmployeeMap对象
    typedef QMap EmployeeMap; 
    EmployeeMap map;

    // 向map里插入键-值
    map["JD001"] = Employee(“John”, “Doe”, 50000);
    map["JW002"] = Employee(“Jane”, “Williams”, 80000);
    map["TJ001"] = Employee(“Tom”, “Jones”, 60000);

    Employee sasha( “Sasha”, “Hind”, 50000 );
    map["SH001"] = sasha;

    // 修改map值的内容,因为map采用值传递,所以无效
    sasha.setSalary( 40000 );

    // 批量打印
    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

你可能感兴趣的:(QT)