1:顺序类容器:
1.1 QList
QList是最常见的容器类,是以数组列表的形式实现的,在其前后添加数据比较快。
QList 用于插入insert()。添加append()和preprend()。替换replace(),删除数据。删除指定内容,删除头或尾内容remove(),removeFirst(),removeLast()等。QList提供下标索引的方式,如果数组,也可以通过at()函数访问指定下标内容。isEmpty()在数据为空时返回true,size()返回列表元素的个数。
1.2 QLinkedList
QLinkedList 操作和QList基本一致,但是因为数据项不是连续内存存储的,所以不提供下标索引访问数据。
1.3 QVector
QVector 可以通过下标索引访问数据,接口和QList一致,但是性能更高,因为它的数据项是连续存储的。
1.4:QStack
QStack 类似于堆栈的先入后出操作,push()和pop()是主要接口函数,例子如下:
QStack<int> _stack;
_stack.push(1);
_stack.push(2);
_stack.push(3);
while (!_stack.isEmpty())
{
qDebug() << _stack.pop();
}
依次输出:3 2 1
1.5 QQueue
QQueue 提供先入先出的操作容器,enqueue()和dequeue()是主要的操作函数,例子如下:
QQueue<int> _queue;
_queue.enqueue(1);
_queue.enqueue(2);
_queue.enqueue(3);
while (!_queue.isEmpty())
{
qDebug() << _queue.dequeue();
}
依次输出:1 2 3
2:关联容器类
2.1 QSET
基于散列表的集合模版,存储顺序不定,查找值的速度非常快,使用举例如下:
QSet<int> numbers;
// 插入元素
numbers.insert(3);
numbers.insert(1);
numbers.insert(2);
numbers.insert(2); // 这个操作会被忽略,因为 2 已经存在
// 输出:1 2 3
qDebug() << "Numbers:" << numbers.toList();
// 查找元素
if (numbers.contains(2)) {
qDebug() << "Number 2 is in the set.";
}
// 删除元素
numbers.remove(1);
// 输出:2 3
qDebug() << "Numbers after removing 1:" << numbers.toList();
2.2 QMap
提供一个字典,一个键映射到一个值,按照键的顺序存储,不在乎存储顺序。值得一提的是,使用value()查找键值的时候,可以设置一个缺省值,如果找不到对应的键则返回缺省值:
timeout = map.value("Time",30);
如果map表中没有Time,则返回30。
2.3 QMultiMap
QMultiMao是QMap的子类,用于处理多值映射。多值映射指一个键可以对应多个值。当存在多个相同的值,使用value()访问对应键的值时,返回最新差的的值。使用values(),则返回QList类型的列表,如下:
QMultiMap<QString, int> _mapltiMap;
_mapltiMap.insert("plan", 1);
_mapltiMap.insert("plan", 2);
_mapltiMap.insert("plan", 2);
_mapltiMap.insert("plan", 3);
qDebug() << _mapltiMap.value("plan",0);
qDebug() << "----------";
QList<int> _list = _mapltiMap.values("plan");
for (int i = 0; i < _list.size(); i++)
{
qDebug() << _list[i];
}
输出:
3
----------
3
2
2
1
2.4 QHash
QHash和QMap几乎完全相同,不过QHash存储数据顺序是任意的。