Qt容器类总结

Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且他们进行了速度和存储的优化,因此可以减少可执行文件的大小。此外,他们还是线程安全的,也就是说他们作为只读容器时可被多个线程访问。

(隐式共享:是对象的管理方法。一个对象被隐式共享,只是传递该对象的一个指针给使用者,而不实际复制对象数据,只有在使用者修改数据时,才实质复制共享对象给使用者。)

一、顺序容器类

Qt的顺序容器类有:QList、QLinkedList、QVector、QStack和QQueue。

1.QList

insert()、replace()、removeAt()、move()、swap()、append()、prepend()、removeFirst()、removeLast()等。

QList<QString> list;
list << "one" << "two" << "three";
QString str1 = list[1];     //str1 =="two"
QString str0 = list.at(0);    //str0 =="one"

2.QLinkedList

QLinkedList<T>是链式列表,数据项不是用连续的内存存储的,它基于迭代器访问数据项,并且插入和删除数据项的操作时间相同。

3.QVector

QVector<T>提供动态数组的功能,以下标索引访问数据。

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

4.QStack

QStack<T>提供类似于堆栈的后入先出操作的容器类,push()和pop()是主要的接口函数。

QStack<int> stack;
stack.push(10);
stack.push(20);
stack.push(30);
while(!stack.isEmpty())
    cout << stack.pop() << endl;

5.QQueue

QQueue<T>是提供类似于队列先入先出操作的容器类,enqueue()和dequeue()是主要操作函数。

QQueue<int> queue;
queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
while(!queue.isEmpty())
    cout << queue.dequeue() << endl;

 

二、关联容器类

Qt的关联容器类有:QSet、QMap、QMultiMap、QHash和QMultiHash。

1.QSet

QSet是基于散列表的集合模板类,他存储数据的顺序是不定的,查找值的速度非常快。

QSet<QString> set;
set << "dog" << "cat" << "tiger";
if(!set.contains("cat"))
    .....

2.QMap

QMap<Key, T>提供一个字典,一个键映射到一个值。QMap存储数据是按照键的顺序,如果不在乎存储顺序,使用QHash会更快。

QMap<QString, int> map;
map["one"] = 1;
map["two"] = 2;
map["three"] = 3;

map.insert("four", 4);
map.remove("two");
int num1 = map["one"];
int num2 = map.value("two");

3.QMultiMap

QMultiMap是QMap的子类,是用于处理多值映射的遍历类。也就是一个键对应多个值。

QMultiMap不提供"[]"操作符,使用value()函数访问最新插入的键的单个值。如果要获取一个键对应的所有值,使用values()函数,返回值是QList<T>类型。

QMultiMap<QString, int> map1, map2, map3;
map1.insert("plenty", 100);
map1.insert("plenty", 2000);
map2.insert("plenty", 5000);
map3 = map1 + map2;


QList<int> values = map.values("plenty");
for(int i = 0; i < values.size(); i++)
    cout << values.at(i) << endl;

4.QHash是基于散列表来实现字典功能的模板类,QHash<Key, T>存储的键值对具有非常快的查找速度。用法和QMap,QMultiHash用法和QMultiMap相同。

 

Study in 《Qt5.9 C++开发指南》

上一篇:python 队列Queue


下一篇:qt获取指定目录下符合条件的文件路径