Qt容器類介紹

2021-09-25 05:14:22 字數 3142 閱讀 6350

qt提供了一些順序容器:qlist,qlinkedlist,qvector,qstack和qqueue。因為這些容器中的資料都是乙個接乙個線性儲存的,所以稱為順序容器

對於大多數應用程式而言,使用最多而且最好的時qlist,儘管它是乙個陣列列表,但是可以快速在其頭部和尾部進行新增操作。

如果需要使用乙個鍊錶,那麼可以使用qlinkedlist;

如果希望資料可以占用連續的記憶體空間,那麼可以使用vector。

而qstack和qqueue分別提供了後進先出(lifo)和先進先出(fifo)語義。

qt還提供了一些關聯容器:qmap,qmultimap,qhash,qmultihash和qset。因為這些容器儲存

的是《鍵,值》對,比如qmap,所以稱為關聯容器。其中,multi容器用來支援乙個鍵多個值的情況。

順序容器

qt 的順序容器類有 qlist、qlinkedlist、qvector、qstack 和 qqueue。

qlist

qlist是最常用的容器類,雖然它是以陣列列表的形式實現的,但是在其前或後新增資料非常快,qlist以下標索引的方式對資料項進行訪問。

qlist提供下標索引方式訪問資料項,如同陣列一樣,也提供at()函式,例如:

qlistlist;

list<<"one"<<"two"<<"three";

qstring str1=list[1];

qsring str0=list.at(0);

qlist的isempty()函式在資料項為空時返回true,size()函式返回資料項的個數。

qlinkedlist

qlinkedlist是鏈式列表,資料項不是用連續的記憶體儲存的,它基於迭代器訪問資料項,並且插入和刪除資料項的操作事件相同。

除了不提供基於下標索引的資料項訪問外,qlinkedlist的其他介面函式與qlist基本相同。

qvector

qvector提供動態陣列的功能,以下標索引訪問資料。

qvector的函式介面與qlist幾乎完全相同,qvector的效能比qlist更高,因為qvector的資料項是連續儲存的。

qstack

qstack是提供類似於堆疊的**先進(lifo)操作的容器類,push()和pop()是主要的介面函式,例如:

qstackstack;

stack.push(10);

stack.push(20);

stack.push(30);

while(!stack.isempty())

cout<關聯容器類

qt還提供關聯容器類qmap,qmultimap,qhash,qmultihash和qset。 

qmultimap 和 qmultihash 支援乙個鍵關聯多個值,qhash 和 qmultihash 類使用雜湊函式進行查詢,查詢速度更快。

qset

qset是基於雜湊表的幾何模板類,它儲存資料的順序是不定的 ,查詢值得速度非常快。qset內部就是用qhash實現的。

定義qmap型別變數和賦值的例子:

qmapmap;

map["one"]=1;

map["two"]=2;

map["three"]=3;

也可以使用insert()函式賦值,或remove()移除乙個鍵值對,如:

map.insert("four",4);

map.remove("two");

要查詢乙個值,使用運算子「」或 value() 函式

int num1 = map["one"];

int num2 = map.value("two");

qmultimap

qmultimap 是 qmap 的子類,是用於處理多值對映的便利類。

多值對映就是乙個鍵可以對應多個值。qmap 正常情況下不允許多值對映,除非使用 qmap::insertmulti() 新增鍵值對。

qmultimap 是 qmap 的子類,所以 qmap 的大多數函式在 qmultimap 都是可用的,但是有幾個特殊的,qmultimap::insert() 等效於 qmap::insertmulti() , qmultimap::replace() 等效於 qmap::insert()。

qmultimapmap1, map2, map3;

map1.insert("plenty", 100);

mapl.insert("plenty", 2000);

map2.insert("plenty", 5000);

map3 = map1 + map2; // map3.size() == 3

qmultimap 不提供「」操作符,使用 value() 函式訪問最新插入的鍵的單個值。如果要獲取乙個鍵對應的所有值,使用 values() 函式,返回值是 qlist型別。

qlistvalues = map.values("plenty");

for (int i = 0; i < values.size(); ++i)

cout << values.at(i) << endl;

qhash

qhash 是基於雜湊表來實現字典功能的模板類,qhash儲存的鍵值對具有非常快的查詢速度。

qhash 與 qmap 的功能和用法相似,區別在於以下幾點:

qhash 比 qmap 的查詢速度快;

在 qmap 上遍歷時,資料項是按照鍵排序的,而 qhash 的資料項是任意順序的;

qmap 的鍵必須提供「<」運算子,qhash 的鍵必須提供「==」運算子和乙個名稱為 qhash() 的全域性雜湊函式

qmultihash

qmultihash 是 qhash 的子類,是用於處理多值對映的便利類,其用法與 qmultimap 類似。

Qt常用容器類

qt為我們提供了一系列基於模板的容器類,來儲存特定型別的項。這些容器類都是隱式共享的 被用作唯讀容器時,是執行緒安全的。與stl類似,也分為序列式容器和關聯式容器。序列式容器有 qvector qlist qlinklist qstack qqueue。對大部分程式來說qlist都是乙個很好的選擇,...

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

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

Qt容器類 QList QMap學習(一)

容器類 唯讀迭代器 讀寫迭代器 qlist,qqueue qlist const iterator qlist iterator qlinkedlist qvector,qstack 示例 include include include include include int main int ar...