區分 Qt QHash 和QMap
本文介紹的是Qt QHash 和QMap的區別,關于容器類可以查閱更多的資料,首先我們先把QHash 和QMap區分開來。內容如下。
QMap提供了一個從類項為key的鍵到類項為T的直的映射,通常所存儲的數據類型是一個鍵對應一個直,并且按照Key的次序存儲數據,這個類也支持一鍵多值的情況,用類QMultiMap
QHash具有和QMap幾乎完全一樣的APi,此類維護這一張哈希表,表的大小和數據項是自適應的,QHash是以任意的順序住址他的數據,,當然了他也是可以支持一鍵多值的,QMultiHash
兩種之間的區別是:
QHash查找速度上顯著于QMap
QHash以任意的方式進行存儲,而QMap則是以key順序進行存儲.
Qhash 的鍵類型必須提供operator==()和yige 全局的qHash(key)函數。而QMap的鍵類型key必須提供operator<()函數.
他們同樣也是有兩種風格的迭代容器。用來進行遍歷的。
STL 風格的
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;
- }
小結:關于Qt 中QHash 和QMap的區別,相信你看完之后,應該很了然一新了。如果你需要對內存分配做優化,Qt的容器提供了三大內存分配函數,reserve(size),顯示預分配size的內存; capacity(),返回已分配內存;squeeze()釋放所有的未占用的內存;當你知道QHash的大小時,可以使用reserve函數預先分配內存。