區(qū)分 Qt QHash 和QMap
本文介紹的是Qt QHash 和QMap的區(qū)別,關(guān)于容器類可以查閱更多的資料,首先我們先把QHash 和QMap區(qū)分開來。內(nèi)容如下。
QMap提供了一個從類項為key的鍵到類項為T的直的映射,通常所存儲的數(shù)據(jù)類型是一個鍵對應(yīng)一個直,并且按照Key的次序存儲數(shù)據(jù),這個類也支持一鍵多值的情況,用類QMultiMap
QHash具有和QMap幾乎完全一樣的APi,此類維護這一張哈希表,表的大小和數(shù)據(jù)項是自適應(yīng)的,QHash是以任意的順序住址他的數(shù)據(jù),,當(dāng)然了他也是可以支持一鍵多值的,QMultiHash
兩種之間的區(qū)別是:
QHash查找速度上顯著于QMap
QHash以任意的方式進行存儲,而QMap則是以key順序進行存儲.
Qhash 的鍵類型必須提供operator==()和yige 全局的qHash(key)函數(shù)。而QMap的鍵類型key必須提供operator<()函數(shù).
他們同樣也是有兩種風(fēng)格的迭代容器。用來進行遍歷的。
STL 風(fēng)格的
QMap<key,T> QMap<key,T>::const_iterator QMap<key,T>::iterator//同樣中間那個也是只讀的,最后那個是讀寫的。下面以一個例子來進行說明:
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QMap<QString, QString> map;
- map.insert("beijing", "111");
- map.insert("shanghai", "021");
- map.insert("tianjin", "022");
- map.insert("chongqing", "023");
- map.insert("jinan", "0531");
- map.insert("wuhan", "027");
- 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");
- if(mi != map.end())
- mi.value() = "010";
- QMap<QString, QString>::const_iterator modi;
- qDebug() << "";
- for( modi=map.constBegin(); modi!=map.constEnd(); ++modi)
- qDebug() << modi.key() <<" " << modi.value();
- return 0;
- }
小結(jié):關(guān)于Qt 中QHash 和QMap的區(qū)別,相信你看完之后,應(yīng)該很了然一新了。如果你需要對內(nèi)存分配做優(yōu)化,Qt的容器提供了三大內(nèi)存分配函數(shù),reserve(size),顯示預(yù)分配size的內(nèi)存; capacity(),返回已分配內(nèi)存;squeeze()釋放所有的未占用的內(nèi)存;當(dāng)你知道QHash的大小時,可以使用reserve函數(shù)預(yù)先分配內(nèi)存。