Qt中的容器类

 容器类就类似STL中的容器,里面可以包含大多数的数据类型,基本类型和Qt的一些数据类型(QString、QDate和QTime等);

         Qt中的QObject以及其他的子类对象是不能够储存在容器中的;

例:

         QList<QToolBar> list;

Qt提供了两个容器类:

1、顺序容器:QList、QLinkedList、QVector、QStack和QQueue;

(1)顺序容器中的数据因为都是一个接一个线性储存的,所以叫顺序容器;

    (2)大多数时候,QList是最好的选择,虽然他是用数组实现的,但它首尾添加元素都非常快。(用于添加、插入、替换、移动、删除;它的数据项有:insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst() 和 removeLast() 等。)

    (3) QLinkedList<T> 是链式列表,数据项不是用连续的内存存储的,它基于迭代器访问数据项,并且插入和删除数据项的操作时间相同。除了不提供基于下标索引的数据项访问外,QLinkedList 的其他接口函数与 QList 基本相同。

    (4) QVector 的函数接口与 QList 几乎完全相同,QVector<T> 的性能比 QList<T> 更高,因为 QVector<P> 的数据项是连续存储的。

    (5)QStackQQueue(栈和队列)分别提供了后进先出(LIFO)和先进先出(FIFO)的机制。

2、关联容器:QMapQMultiMapQHashQMultiHashQSet

(1)因为这些容器存储的是<键,值>对,比如QMap<Key,T>,所以称为关联容器。

也可以使用insert()函数赋值,或remove()移除一个键值对

map.insert("four", 4);
map.remove("two");

要查找一个值,使用运算符“[]”或value()函数

int num1 = map["one"];
int num2 = map.value("two");

(2)QMulti容器支持一个键对应多个值。

(3)QHash容器在有序集合上使用hash函数进行快速的查找,而没有用二叉搜索。

(4)QHash和QMap的差异:

1、QHash在查找元素时效率要高于QMap

2、QHash的元素是无序排列的,QMap的元素是按照Key的顺序存储的。

3、QHash的Key类型必须提供重载的==运算符和一个全局的qHash(Key)方法;QMap的Key类型必须提 供重载的<运算符。

概述

QList<T>

这是目前使用最频繁的容器类,它存储了指定类型(T)的一串值,可以通过索引来获得。本质上QList是用数组实现的,从而保证基于索引的访问非常快。

QLinkedList<T>

类似于QList,但它使用迭代器而不是整数索引来获得项。当在一个很大的list中间插入项时,它提供了更好的性能,并且它有更好的迭代器机制。

QVector<T>

在内存中相邻的位置存储一组值,在开头或中间插入会非常慢,因为它会导致内存中很多项移动一个位置。

QStack<T>

QVector的一个子类,提供后进先出的机制。在当前的QVector中增加了几个方法:push()pos()top()

QQueue<T>

QList的一个子类,提供了先进先出的机制,在当前的QList中增加了几个方法:enqueue()dequeue()head()

QSet<T>

单值的数学集合,能够快速查找。

QMap<Key, T>

提供了字典(关联数组)将类型Key的键对应类型T的值。通常一个键对应一个值,QMapKey的顺序存储数据,如果顺序不重要,QHash是一个更快的选择。

QMultiMap<Key, T>

QMap的子类,提供了多值的接口,一个键对应多个值。

QHash<Key, T>

QMap几乎有着相同的接口,但查找起来更快。QHash存储数据没有什么顺序。

QMultiHash<Key, T>

QHash的子类,提供了多值的接口。


版权声明:本文为m0_46408680原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。