區(qū)分 Qt QHash 和QMap
本文介紹的是Qt QHash 和QMap的區(qū)別,關(guān)于容器類可以查閱更多的資料,首先我們先把QHash 和QMap區(qū)分開(kāi)來(lái)。內(nèi)容如下。
QMap提供了一個(gè)從類項(xiàng)為key的鍵到類項(xiàng)為T的直的映射,通常所存儲(chǔ)的數(shù)據(jù)類型是一個(gè)鍵對(duì)應(yīng)一個(gè)直,并且按照Key的次序存儲(chǔ)數(shù)據(jù),這個(gè)類也支持一鍵多值的情況,用類QMultiMap
QHash具有和QMap幾乎完全一樣的APi,此類維護(hù)這一張哈希表,表的大小和數(shù)據(jù)項(xiàng)是自適應(yīng)的,QHash是以任意的順序住址他的數(shù)據(jù),,當(dāng)然了他也是可以支持一鍵多值的,QMultiHash
兩種之間的區(qū)別是:
QHash查找速度上顯著于QMap
QHash以任意的方式進(jìn)行存儲(chǔ),而QMap則是以key順序進(jìn)行存儲(chǔ).
Qhash 的鍵類型必須提供operator==()和yige 全局的qHash(key)函數(shù)。而QMap的鍵類型key必須提供operator<()函數(shù).
他們同樣也是有兩種風(fēng)格的迭代容器。用來(lái)進(jìn)行遍歷的。
STL 風(fēng)格的
QMap<key,T> QMap<key,T>::const_iterator QMap<key,T>::iterator//同樣中間那個(gè)也是只讀的,最后那個(gè)是讀寫的。下面以一個(gè)例子來(lái)進(jìn)行說(shuō)明:
- #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)該很了然一新了。如果你需要對(duì)內(nèi)存分配做優(yōu)化,Qt的容器提供了三大內(nèi)存分配函數(shù),reserve(size),顯示預(yù)分配size的內(nèi)存; capacity(),返回已分配內(nèi)存;squeeze()釋放所有的未占用的內(nèi)存;當(dāng)你知道QHash的大小時(shí),可以使用reserve函數(shù)預(yù)先分配內(nèi)存。