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

差别:

  1. QHash具有比QMap更快的查找速度
  2. QHash以任意顺序存储数据,QMap总是按照Key的顺序存储
  3. 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);
}

 

posted @ 2020-02-13 11:23  啸傲风月  阅读(170)  评论(0编辑  收藏  举报