Qt容器

133 阅读2分钟

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存储数据顺序是任意的。