Qt常用容器類的使用
1.概述
Qt提供了多個基于模板的容器類,這些類可以用于存儲指定類型的數(shù)據(jù)項,例如QStringList就是從QList<QString>繼承的,可以實現(xiàn)對字符串的增、刪等操作。
Qt的容器類分為順序容器和關(guān)聯(lián)容器。
Qt的容器類比STL更輕巧、安全和容易使用,并且還是線程安全的。
例:定義一個QList<QString> 容器
QList<QString> str; str.append("A"); str.append("B"); str.append("C");
2.順序容器類
Qt順序容器類如下所示:
- QList
- QLinkedList
- QVector
- QStack
- QQueue
2.1QList
比較常用的容器類,以數(shù)組列表的形式實現(xiàn),在前、后添加數(shù)據(jù)非??臁R韵聻槌S梅椒?。
插入:insert()
刪除:removeAt()
替換:replace()
移動:move()
添加:append()
2.2QLinkedList
是鏈式列表,數(shù)據(jù)項不是連續(xù)的內(nèi)存存儲,基于迭代器訪問數(shù)據(jù)項,插入和刪除數(shù)據(jù)項操作時間相同
2.3QVector
提供動態(tài)數(shù)組的功能,與QList接口基本相同,數(shù)據(jù)項是連續(xù)存儲的。
2.4QStack
類似于堆棧,后入先出的特點,push()和pop()用于數(shù)據(jù)進出棧。
QStack<int> stack; stack.push(1); stack.push(2); stack.push(3); while(!stack.isEmpty()) stack.pop();
2.5QQueue
類似于隊列,先入先出的特點,enqueue()和dequeue()用于操作數(shù)據(jù)進出隊列。
QQueue<int> queue; queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); while(!queue.isEmpty()) queue.dequeue();
3.關(guān)聯(lián)容器類
關(guān)聯(lián)容器如下所示
- QMap
- QMultiMap
- QHash
- QMultiHash
- QSet
3.1QSet
基于散列表的集合模板類,存儲數(shù)據(jù)的順序不定,查找速度非??臁?/p>
3.2QMap
QMap存儲數(shù)據(jù)按照鍵的順序來存儲的,一個鍵映射一個值。
QMap<int,int> map; map[1] = 1; map[2] = 2; map[3] = 3; //或者使用insert QMap<int,int> map; map.insert(1,1); map.insert(2,2); map.insert(3,3);
查找
int num = map[1]; //或者 int num2 = map.value[2];
3.3QMultiMap
是QMap的子類,一個鍵可以對應(yīng)多個值。
QMultiMap<int,int> map; map.insert(1,1); map.insert(1,2); //map.size() == 2
3.4QHash
基于散列表來實現(xiàn)的,查找速度非???。
和QMap比較
- QHash查找速度更快
- QMap是按鍵順序排序的,QHash數(shù)據(jù)項任意排序
3.5QMultiHash
QMultiHash是QHash的子類,用于處理多值映射的類,與QMultiMap類似。
到此這篇關(guān)于Qt常用容器類的使用的文章就介紹到這了,更多相關(guān)Qt 容器類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!