Qt 容器类
Mr.codeee 人气:11.概述
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类似。
加载全部内容