QMap和QHash類

Plus_L發表於2018-08-06

QMap和QHash具有非常相似的功能,它們的差別僅在於:

1.QHash具有比QMap更快的查詢速度.

2.QHash以任意的順序儲存資料項,而QMap總是按照鍵 key的順序儲存資料.

3.QHash的鍵型別 Key必須提供operator==()和一個全域性的qHash(Key)函式,而QMap的鍵型別Key

必須提供一個operator<()函式。

 

兩者時間複雜度比較

容器類 鍵查詢   插入  
  平均 最壞 平均 最壞
QMap O(log n) O(log n) O(log n) O(log n)
QHash Amort.O(1) O(n) Amort.O(1) O(n)

 

QMap類:

QMap<Key ,T>提供了一個從型別為Key的鍵到型別為T的值得對映。

QMap儲存的資料形式是一個鍵對應一個值,並且按照鍵Key的順序儲存資料。

 

QMap的使用例子

#include <QCoreApplication>
#include<QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QMap<QString,QString> map;
    map.insert("beijing","111");          //map插入字串"beijing" "111"
    map.insert("shanghai","222");         //map插入字串"shanghai" "222"

    QMap<QString,QString>::const_iterator i;
    for(i=map.constBegin();i!=map.constEnd();i++)   //迭代器遍歷輸出字串
        qDebug()<<"  "<<i.key()<<"  "<<i.value();

    QMap<QString,QString>::iterator mi;
    mi=map.find("beijing");            //遍歷查詢"beijing" 的map
    if(mi!=map.end())
        mi.value()="001";             //替換"111"

    QMap<QString,QString>::const_iterator modi;
    qDebug()<<"  ";
    for(modi=map.constBegin();modi!=map.constEnd();modi++)   //再次遍歷輸出map的鍵值
    {
        qDebug()<<"  "<<modi.key()<<"  "<<modi.value();
    }

    return a.exec();
}

程式輸出:

輸出

 

STL風格迭代器的兩種分類:

容器類 只讀迭代器 讀寫迭代器
QMap<key,T>,QMultiMap<Key,T> QMap<key,T>::const_iterator QMap<key,T>::iterator
QHash<Key T>,QMultiHash<Key,T> QHash<Key,T>::const_iterator QHash<Key,T>::iterator

 

關於QMap和QHash的用法及成員函式詳解可參考Qt文件

http://doc.qt.io/qt-5/qmap.html

http://doc.qt.io/qt-5/qhash.html

 

相關文章