天天看點

比較QMap、QHash(順便講了如何解決QMap和QList混合時遇到的坑)

這兩個是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值為整型時):

比較QMap、QHash(順便講了如何解決QMap和QList混合時遇到的坑)
比較QMap、QHash(順便講了如何解決QMap和QList混合時遇到的坑)

Demo2(當key值為QString時):

比較QMap、QHash(順便講了如何解決QMap和QList混合時遇到的坑)

由上面Demo可以看出,當key值是QString型時,QMap和QHash輸出的是一樣的。

當key值為int時,QMap按key的整型順序排列,而QHash就是随機輸出。  

使用QMap和QList混合時遇到的坑:

當自定義一個QList類型時,我直接寫:

繼續閱讀