3、QMap,QHash,QVector

发布时间 2023-11-22 16:20:41作者: 秃头的C#

QMap

  QMap<Key,T>提供一个从类型为Key的键到类型为T的值的映射。形式为一个键对应一个值。按照键Key的次序存储数据。为了能够支持一键多值,QMap提供QMap<Key,T>::insertMulti()和QMap<Key,T>::values()的函数。

//QMap类
    //1:创建Map实例,第一个参数为QString类型的键值,第二个参数为int类型的值
    QMap<QString,int> qmap;

    //插入信息
    qmap["Chinese"]=120;
    qmap["Math"]=108;
    qmap.insert("English",20);

    qDebug() << qmap;

    //删除数据
    qmap.remove("English");
    qDebug() << qmap;


    //遍历QMap类实例
    // 1:迭代器
    QMapIterator<QString,int> itr(qmap);
    while (itr.hasNext()) {
        itr.next();
        qDebug() << itr.key() << ":" << itr.value();
    }


    // 2:STL类型的迭代
    QMap<QString,int>::const_iterator stritr=qmap.constBegin();
    while (stritr != qmap.constEnd()) {
        qDebug() << stritr.key() << ":" << stritr.value();
        stritr++;
    }


    //根据key查找value
    qDebug() << qmap.value("Math");
    //根据value查找key
    qDebug() << qmap.key(108);


    //修改键值
    // 一个键对应一个值,再次调用insert()将覆盖之前的值
    qmap.insert("Math",120);
    qDebug() << qmap.value("Math");

    //查询是否包含某个键
    qDebug() << qmap.contains("Math");

    //输出所有QMap实例化
    QList<QString> aKeys=qmap.keys();
    qDebug() << aKeys;

    QList<int> aValues=qmap.values();
    qDebug() << aValues;

    //一个键对应多个值  QMultiMap类来实例化QMap对象
    QMultiMap<QString,QString> mulmap;
    mulmap.insert("student","no");
    mulmap.insert("student","name");
    mulmap.insert("student","sex");
    mulmap.insert("student","age");

    qDebug() << mulmap;

 QHash类

  QHash<Key,T>具有QMap几乎完全相同的API,QHash维护着一张哈希表,哈希表的大小与QHash的数据项的数目相适应。

  QHash以任意的顺序组织它的数据,当存储书的顺序无关紧要时,建议使用QHash作为存放数据的容器。

QHash<QString ,int> qh;
    qh["key 1"]=1;
    qh["key 2"]=2;
    qh["key 3"]=3;
    qh["key 4"]=4;

    qh.insert("key 5",5);

    QList<QString> list=qh.keys();
    qDebug() << list;

    QHash<QString,int>::const_iterator itr;
    for(itr=qh.begin();itr !=qh.end();itr ++){
        qDebug() << itr.key();
    }

QMap和QHash的区别

  • 功能差不多,但QHash查找速度快
  • QMap是按照键的顺序存储数据的,QHash是任意顺序
  • QMap的键必须提供“<”运算符,而QHash的键必须提供“==”运算符和一个名为qHash()的全局三列函数。

QVector类

  QVector<T>在相邻的内存当中存储给定数据类型T的一组数值。在前部或者中间位置进行操作的速度是很慢的,因为这样的操作将导致内存中的大量数据被移动。

QVector<int> qvr;
    
    qvr<<10;
    
    qvr << 20;
    
    qvr.append(30);
    qvr.append(40);
    
    qDebug() << qvr;
    
    for(int i=0;i<qvr.count();i++){
        qDebug() << qvr[i];
    }
    
    //删除
    //    qvr.remove(1);
    //qDebug() << qvr;
    
    //范围删除
    qvr.remove(1,2);
    qDebug() << qvr;