类 | 简介 |
QList<T> | 这是目前最常用的容器类。他存储了给定类型的值的一个列表,而这些值可以通过索引访问。在内部,QList使用数组来实现,以确保进行快速的基于索引的访问。可以使用QList::append()和QList::preappend()在列表的两端添加项目,也可以使用QList::insert()在列表的中间插入项目。常用的QStringList继承自QList<QString>. |
QLinkedList<T> | 除了使用迭代器而不使用整数索引进行项目访问外,他基本与QList相当。当向一个很大的列表的中间插入项目时,QLinkedList比QList拥有更好的性能,而且它拥有更好的迭代器语义。(当迭代器指向一个QLinkedList的一个项目后,只要这个项目还存在,那么迭代器就依然有效;而当迭代器指向QList中的一个项目后,如果QList进行了插入或者删除操作,那么这个迭代器就无效了) |
QVector<T> | 它在内存的相邻位置存储给定类型的值的一个数组。在vector的前面或者中间插入项目是非常缓慢的,因为这样可能导致大量的项目在内存中移动一个位置。 |
QStack<T> | 它是QVector的一个便捷子类,提供了后进先出LIFO语义。它添加了push()、pop()和top()等函数 |
QQueue<T> | 它是QList的一个便捷子类,提供了先进先出FIFO语义。他添加了enqueue()、dequeue()和head()等函数 |
QSet<T> | 它提供了可以快速查询单值的数学集 |
QMap<key,T> | 它提供了一个字典(关联数组),将key类型的键值映射到T类型的值上。一般一个键关联一个单一的值。QMap使用键顺序来存储它的数据;如果不关心存储顺序,那么可以使用QHash来代替它,因为QHash速度更快。 |
QMultiMap<key,T> | 他是QMap的一个便捷类,提供了多值映射的接口函数,例如一个键可以关联多个值 |
QHash<key,T> | 它与QMap拥有基本相同的接口,但是它的查找速度更快。QHash的数据是以任意的顺序存储的 |
QMultiHash<key,T> | 它是QHash的一个便捷类,提供了实现多值散列的接口函数 |
QList示例
#include <QCoreApplication>
#include <QList>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QString> list;
list<<"aa"<<"bb"<<"cc"; //插入项目
if(list[1] == "bb")
list[1] = "ab";
list.replace(2,"bc"); //将"cc"换为"bc"
qDebug()<<"the list is:"; //输出整个列表
for(int i = 0;i<list.size();i++)
{
qDebug()<<list.at(i);
}
list.append("dd"); //在列表尾部添加
list.prepend("mm"); //在列表头部添加
QString str = list.takeAt(2);//从列表中删除第三个项目,并获取它
qDebug()<<"at(2) item is:"<<str;
qDebug()<<"the list is:"; //输出整个列表
for(int i = 0;i<list.size();i++)
{
qDebug()<<list.at(i);//使用at比使用[]速度要快得多
}
list.insert(2,"mm"); //在位置2插入项目
list.swap(1,3); //交换项目1和项目3
qDebug()<<"the list is:"; //输出整个列表
for(int i = 0;i<list.size();i++)
{
qDebug()<<list.at(i);
}
qDebug()<<"contains 'mm'?"<<list.contains("mm");// 列表中是否包含"mm"
qDebug()<<"the 'mm' count:"<<list.count("mm");//包含"mm"的个数
//第一个"mm"的位置,默认从位置0开始往前查找,返回第一个匹配的项目的位置
qDebug()<<"the first 'mm' index:"<<list.indexOf("mm");
//从第二个"mm"的位置,我们指定从位置一开始往前查找
qDebug()<<"the second 'mm' index:"<<list.indexOf("mm",1);
list.append("qw");
list.append("er");
//删除指定位置
list.removeAt(1);
//移动
list.move(2,3);
//删除第一个
list.removeFirst();
//删除最后一个
list.removeLast();
//获取第一个并删除第一个
str = list.takeFirst();
//获取最后一个并删除最后一个
str = list.takeLast();
return a.exec();
}
QMap示例:
#include <QCoreApplication>
#include <QList>
#include <QDebug>
#include <QMap>
#include <QMultiMap>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<QString ,int> map;
map["one"] = 1; //向map中插入("one",1)
map["three"] = 3;
map.insert("seven",7); //使用insert函数进行插入
//获取键的值,使用"[]"操作符时,如果map中没有该键,那么会自动插入
int value1 = map["six"];
qDebug()<<"value1:"<<value1;
qDebug()<<"contains 'six'?"<<map.contains("six");
//使用value()函数获取该键的值,这样当键不存在时不会自动插入
int value2 = map.value("five");
qDebug()<<"value2:"<<value2; //value2=0
qDebug()<<"contains 'five'?"<<map.contains("five");
//当键不存在时,value()的默认返回0,这里可以设定该值,比如这里设值为9,不会插入"nine"
int value3 = map.value("nine",9);
qDebug()<<"value3:"<<value3;
//map默认是一个键对应一个值,如果重新给该键设置了值,那么以前的会被擦出
map.insert("ten", 10);
map.insert("ten",100);
qDebug()<<"ten:"<<map.value("ten");
//可以使用insertMulti()函数来实现一键多值,然后使用values()函数来获取值的列表
map.insertMulti("two",2);
map.insertMulti("two",4);
QList<int> values = map.values("two");
qDebug()<<"two:"<<values;
//也可以使用QMultiMap来实现一键多值
QMultiMap<QString,int> map1,map2,map3;
map1.insert("values",1);
map1.insert("values",2);
map2.insert("values",3);
//可以进行相加,这样map3的values键将包含2,1,3三个值
map3 = map1 + map2;
QList<int> myValues = map3.values("values");
qDebug()<<"the values are:";
for(int i = 0; i < myValues.size();i++)
{
qDebug()<<myValues.at(i);
}
return a.exec();
}