1.概述
Qt提供了多个基于模板的容器类,这些类可以用于存储指定类型的数据项,例如QStringList就是从QList<QString>继承的,可以实现对字符串的增、删等操作。
Qt的容器类分为顺序容器和关联容器。
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
比较常用的容器类,以数组列表的形式实现,在前、后添加数据非常快。以下为常用方法。
插入:insert()
删除:removeAt()
替换:replace()
移动:move()
添加:append()
2.2QLinkedList
是链式列表,数据项不是连续的内存存储,基于迭代器访问数据项,插入和删除数据项操作时间相同
2.3QVector
提供动态数组的功能,与QList接口基本相同,数据项是连续存储的。
2.4QStack
类似于堆栈,后入先出的特点,push()和pop()用于数据进出栈。
QStack<int> stack;
stack.push(1);
stack.push(2);
stack.push(3);
while(!stack.isEmpty())
stack.pop();
2.5QQueue
类似于队列,先入先出的特点,enqueue()和dequeue()用于操作数据进出队列。
QQueue<int> queue;
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
while(!queue.isEmpty())
queue.dequeue();
3.关联容器类
关联容器如下所示
- QMap
- QMultiMap
- QHash
- QMultiHash
- QSet
3.1QSet
基于散列表的集合模板类,存储数据的顺序不定,查找速度非常快。
3.2QMap
QMap存储数据按照键的顺序来存储的,一个键映射一个值。
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的子类,一个键可以对应多个值。
QMultiMap<int,int> map;
map.insert(1,1);
map.insert(1,2);
//map.size() == 2
3.4QHash
基于散列表来实现的,查找速度非常快。
和QMap比较
- QHash查找速度更快
- QMap是按键顺序排序的,QHash数据项任意排序
3.5QMultiHash
QMultiHash是QHash的子类,用于处理多值映射的类,与QMultiMap类似。
到此这篇关于Qt常用容器类的使用的文章就介绍到这了,更多相关Qt 容器类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!