zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    Flink 1.14 新特性预览
    基于 MaxCompute 的实时数据处理实践
    Serverless 工程实践 | 细数 Serverless 的配套服务
    不得不看!虚拟货币和区块链的关系
    美国华尔街拥抱区块链是最大的威胁
    1.图片底部圆弧
    二、快捷键
    三、ASP.NET Core 部署Linux
    一、.NET Core MVC 项目结构模板
    一、纯css实现顶部进度条随滚动条滚动
  • 原文地址:https://www.cnblogs.com/xiaoaofengyue/p/12302799.html
Copyright © 2011-2022 走看看