QMap提供了一個從類項為key的鍵到類項為T的直的映射,通常所存儲的數據類型是一個鍵對應一個直,並且按照Key的次序存儲數據,這個類也支持一鍵多值的情況,用類QMultiMap
QHash具有和QMap幾乎完全一樣的APi,此類維護這一張哈希表,表的大小和數據項是自適應的,QHash是以任意的順序住址他的數據,,當然了他也是可以支持一鍵多值的,QMultiHash
兩種之間的區別是:
QHash查找速度上顯著於QMap
QHash以任意的方式進行存儲,而QMap則是以key順序進行存儲.
Qhash 的鍵類型必須提供operator==()和yige 全局的qHash(key)函數。而QMap的鍵類型key必須提供operator<()函數.
他們同樣也是有兩種風格的迭代容器。用來進行遍歷的。
1 ///QMap<Key,T(value)> and QHash<K,T>
2
3 #include <QtCore/QCoreApplication>
4 #include <qmap.h>
5 #include <qdebug.h>
6
7 int main(int argc, char *argv[]) 8 { 9 QCoreApplication a(argc, argv); 10
11 QMap<QString,int> map; 12 map.insert("eins o",1); 13 map.insert("sieben",7); 14 map["a test"]=23; 15 //Normally, a QMap allows only one value per key. 16 //If you call insert() with a key that already exists in the QMap, 17 //the previous value will be erased
18 map["a test"]=13; 19
20 int val=map.value("a test"); 21 qDebug()<<val; 22
23 int val2=map.value("error"); 24 qDebug()<<val2; ///0
25
26 int val3=map.value("error2",20); 27 qDebug()<<val3; 28
29 int val4=map.value("a test",40); 30 qDebug()<<val4; 31 using a java-style iterator 32 QMapIterator<QString,int> iter(map); 33 while(iter.hasNext()) 34 { 35 iter.next(); ///放在前面
36 qDebug()<<iter.key()<<" "<<iter.value(); 37 } 38 using an Stl-style iterator 39 QMap<QString,int>::ConstIterator i=map.constBegin(); 40 while(i!=map.constEnd()) 41 { 42 qDebug()<<i.key()<<": "<<i.value(); 43 ++i; 44 } 45
46 QMap<QString,int>::Iterator it; 47 it=map.find("sieben"); 48 if(it!=map.end()) 49 it.value()=8; 50
51 for(QMap<QString,int>::ConstIterator ite=map.constBegin(); ite!=map.constEnd(); ++ite) 52 qDebug()<<ite.key()<<": "<<ite.value(); 53
54 return 0;//a.exec();
55 }
結果: 13
0
20
13
"a test" 13
"eins o" 1
"sieben" 7
"a test" : 13
"eins o" : 1
"sieben" : 7
"a test" : 13
"eins o" : 1
"sieben" : 8 請按任意鍵繼續. . .