2.2 Qt容器类
1.QList,QLinkedList,QVector
时间复杂度
容器类 |
查找 |
插入 |
头部添加 |
尾部添加 |
QList |
O(1) |
O(n) |
Amort.O(1) |
Amort.O(1) |
QLinkedList |
O(n) |
O(1) |
O(1) |
O(1) |
QVector |
O(1) |
O(n) |
O(n) |
Amort.O(1) |
QList维护了一个指针数组,数组存储的指针指向QList<T>存储的列表项的内容
QLinkedList是一个链式列表里,它以非连续的内存块保存数据。不能使用下标,只能使用迭代器访问数据项
QVector在相邻的内存中存储给定数据类型T的一组数值。
QList<QString> list; list<<"111"; list<<"222"; for(QString s:list){ ui->textEdit->append(s); } ui->textEdit->append("Java 风格"); QListIterator<QString> i(list); for(;i.hasNext();){ ui->textEdit->append(i.next()); } ui->textEdit->append("STL 风格"); QList<QString>::iterator i2; for(i2=list.begin();i2!=list.end();i2++){ ui->textEdit->append(*i2); }
2. QMap和QHash
差别:
- QHash具有比QMap更快的查找速度
- QHash以任意顺序存储数据,QMap总是按照Key的顺序存储
- QHash的键类型必须提供operator==()和一个全局的qHash(Key)函数,而QMap的键类型必须提供operator<()函数
容器类 |
键查找 |
插入 |
||
平均 |
最坏 |
平均 |
最坏 |
|
QMap |
O(log n) |
O(log n) |
O(log n) |
O(log n) |
QHash |
Amort.O(1) |
O(n) |
Amort.O(1) |
O(n) |
QMap<QString,QString> map; map.insert("beijing","111"); map.insert("tianjin","222"); map.insert("shenyang","333"); QMapIterator<QString,QString> i(map); for(;i.hasNext();){ i.next(); QString line=QString("key=%1 value=%2").arg(i.key()).arg(i.value()); ui->textEdit->append(line); } QMutableMapIterator<QString,QString> mi(map); if(mi.findNext("111")) mi.setValue("010"); // QMapIterator<QString,QString> i2(map); // for(;i2.hasNext();){ // i2.next(); // QString line=QString("key=%1 value=%2").arg(i2.key()).arg(i2.value()); // ui->textEdit->append(line); // } QMap<QString,QString>::const_iterator i2; for(i2=map.constBegin();i2!=map.constEnd();i2++){ QString line=QString("key=%1 value=%2").arg(i2.key()).arg(i2.value()); ui->textEdit->append(line); } QMap<QString,QString>::iterator i3; for(i3=map.begin();i3!=map.end();i3++){ QString line=QString("key=%1 value=%2").arg(i3.key()).arg(i3.value()); ui->textEdit->append(line); }