這兩個是Qt中比較常見的容器。下面來說說我的了解:
觀點,技巧:
如果要求資料量小,在乎查找速度的時候用QHash,資料量大,記憶體限制嚴格時用QMap。
要掌握的基本要領:
QMap提供了一個從類項為key的鍵到類項為T的直的映射,通常所存儲的資料類型是一個鍵對應一個直,并且按照Key的次序存儲資料,這個類也支援一鍵多值的情況,用類QMultiMap
QHash具有和QMap幾乎完全一樣的APi,此類維護這一張哈希表,表的大小和資料項是自适應的,QHash是以任意的順序住址他的資料,,當然了他也是可以支援一鍵多值的,QMultiHash
兩種之間的差別是:
1、QHash查找速度上顯著于QMap
2、QHash以任意的方式進行存儲,而QMap則是以key順序進行存儲
3、Qhash 的鍵類型必須提供operator==()和一個全局的qHash(key)函數。而QMap的鍵類型key必須提供operator<()
實作角度:
QMap是使用“平衡二叉樹”實作的,QHash是使用“哈希”算法實作的。
做了兩個Demo來區分QMap和QHash:
Demo1(當key值為整型時):
Demo2(當key值為QString時):
由上面Demo可以看出,當key值是QString型時,QMap和QHash輸出的是一樣的。
當key值為int時,QMap按key的整型順序排列,而QHash就是随機輸出。
使用QMap和QList混合時遇到的坑:
當自定義一個QList類型時,我直接寫: