QT容器類(三) 之 QMap QHash

2021-06-20 00:42:10 字數 1395 閱讀 9415

(一)介紹

qmap

qmap中的key-value對是公升序排列的

插入和刪除操作中都可以使用運算子,其下標為key;為避免建立不必要的空值,推薦用vlaue()而不是從qmap中取值。

qmap中的k和t除了要求具備預設建構函式、拷貝建構函式和賦值運算子外,k還必須支援operator

keys() & values()

qmap的特性是單值;qmultimap則支援同一關鍵字下多值的存在,插入操作由insertmulti()完成

qhash

qhash提供的介面和qmap很相似

qhash中的k要符合的額外要求:支援operator ==,並且k可用全域性函式qhash()來計算hash value

qhash通常是單值的,而qmultihash則通過insertmulti()支援多值插入。

(二)對比

qmap提供了乙個從類項為key的鍵到類項為t的直的對映,通常所儲存的資料型別是乙個鍵對應乙個直,並且按照key的次序儲存資料,這個類也支援一鍵多值的情況,用類qmultimap

qhash具有和qmap幾乎完全一樣的api,此類維護這一張雜湊表,表的大小和資料項是自適應的,qhash是以任意的順序住址他的資料,,當然了他也是可以支援一鍵多值的,qmultihash

兩種之間的區別是:

qhash查詢速度上顯著於qmap

qhash以任意的方式進行儲存,而qmap則是以key順序進行儲存.

qhash 的鍵型別必須提供operator==()和yige 全域性的qhash(key)函式。而qmap的鍵型別key必須提供operator

(三)例子

Qt的容器類之容器,迭代器

qt中的容器被分為兩個大類 容器元素是乙個值的,比如qvector,以及容器元 素是乙個 key,value 對的,比如qmap。1 第一大類中,qvector將其所有元素存放在一塊連續的記憶體中。隨機訪問的速度很快,但是插入 刪除操作很慢。qstack是qvector的子類,實現棧的功能。除了具有...

Qt的容器類之通用演算法

我們經常對不同型別的容器做類似的操作。由此而生了通用演算法。qt實現了其中最常用的13個。下面對列舉這些通用演算法 1 排序 qsort使用快速排序演算法,將乙個元素序列排成公升序。qstablesort也能完成類似的排序操作,但是能夠確保值相等的元素在排序的前後相對順序不變。2 搜尋 對於有序容器...

Qt容器類介紹

qt提供了一些順序容器 qlist,qlinkedlist,qvector,qstack和qqueue。因為這些容器中的資料都是乙個接乙個線性儲存的,所以稱為順序容器。對於大多數應用程式而言,使用最多而且最好的時qlist,儘管它是乙個陣列列表,但是可以快速在其頭部和尾部進行新增操作。如果需要使用乙...