首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >QT的基本容器类型-QMAP,QHASH,QVector

QT的基本容器类型-QMAP,QHASH,QVector

原创
作者头像
Swing Dunn
发布2025-12-03 16:16:55
发布2025-12-03 16:16:55
900
举报
文章被收录于专栏:Qt_5_FQt_5_F
代码语言:txt
复制
#include <QCoreApplication>
#include<QDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //QMap类
    //1:创建QMap实例, 第一个参数为QSstring类型的key, 第二个参数为int类型的value
    //按key的顺序排序
    QMap<QString, int> qmap;
    //插入数据的两种方式
    qmap["Chinese"] = 115;
    qmap["English"] = 120;

    qmap.insert("Math",115);
    qmap.insert("Phtsics",99);
    qmap.insert("Chemistry", 100);

    //删除数据信息key键
    qmap.remove("Chemistry");

    //遍历QMap类的实例 数据信息
    //1:迭代器(java类型的迭代操作)
    QMapIterator<QString,int> itr(qmap);
    while (itr.hasNext() ){
        itr.next();
        qDebug()<< itr.key() << " : " << itr.value();
    }

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

     qDebug() << "--------------------------------------------";
    //查找
    //key键/T键 --》来查找
    qDebug()<<"根据key值来查找对应的Value Math: "<< qmap.value("Math");
    qDebug()<<"根据value来查找对应的key  115" <<qmap.key(115); //返回第一个匹配的key

    qDebug() << "--------------------------------------------";
    //修改值
    //一般key是唯一的 再次调用insert()将覆盖之前的值  插入值的方式即可用来修改值
    qmap.insert("Math", 118);
    qmap["Math"] = 120;
    qDebug()<<"Math: " <<qmap.value("Math");
    qDebug()<<"Math: "<< qmap["Math"];

    qDebug() << "--------------------------------------------";
    //查询
    //查询是否包含某个key
    qDebug()<<"是否包含某个key Chinese:" <<qmap.contains("Chinese");
    qDebug() << "是否包含某个key Chemistry: " <<qmap.contains("Chemistry");

     qDebug() << "--------------------------------------------";
    //输出所有QMap实例化:key值和value(T)值
    qDebug() << endl;
    QList<QString> akeys = qmap.keys();
    qDebug()<<akeys;

    QList<int> avalues = qmap.values();
    qDebug()<<avalues;
    for(int i =0 ; i < akeys.size(); i++)
    {
        QString key = akeys.at(i);
        qDebug()<<key << " : " << qmap.value(key);
    }
    qDebug() << "--------------------------------------------";
    qDebug()<<qmap <<endl;

    qDebug() << "--------------------------------------------";
    //当一个键对应多个值的时候 使用QMultiMap来实例化一个QMap对象
    QMultiMap<QString, QString> multimap;
    //multimap["student"] = "no";  //此时这种插值方法是不可以的
    multimap.insert("student", "name");
    multimap.insert("student", "sex");
    multimap.insert("student", "age");
    multimap.insert("student","height");
    qDebug()<<multimap;


    //QHash类 无序的map字典
    //QHash<key>具有与QMap几乎完全相同的API,QHash维护的是一张hash表,哈希表的大小与QHash的数据项的数目相适应
    //QHash以任意的顺序组织它的数据,当存储的数据的顺序无关紧要时,建议使用QHash作为存放数据的容器

    qDebug() << "---------------------QHASH-----------------------";
    QHash<QString, int> qhash;
    qhash["key 1"] = 3;
    qhash["key 2"] = 8;
    qhash["key 3"] = 4;
    qhash["key 4"] = 2;
    qhash.insert("key 3",90);

    QList<QString> list = qhash.keys();
    for(int i = 0 ; i < list.size(); i++)
        qDebug()<<list[i]<<" , " << qhash.value(list[i]);

     qDebug() << "---------------------QHASH-----------------------";
    //QHash内部的迭代器类QHashIterator类
    QHash<QString, int>::const_iterator iterator;
    for(iterator = qhash.begin();iterator != qhash.end();iterator++)
        qDebug()<<iterator.key()<<" : "<<iterator.value();

    //--------  QMap与QHash的区别 -----------//
    //1.QHash与QMap功能差不多,但是QHash的查找速度更快
    //2.QMap是有序的,按key的顺序存储数据;QHash是无序的
    //3.QMap的键必须提供"<"运算符, 而QHash的键必须提供“==”运算符和一个名为qHash()的全局散列函数



    qDebug() << "---------------------QVector-----------------------";
    //容器类QVector<T> 在相邻的内存中存储给定数据类型T的一组数值,在一个QVector的前部或则中间位置位置插值速度
    //很慢,会导致后续的大量数据被移动,因为是连续存储的(有点像变长数组)
    //QVector<T>类 是Qt的一个容器类

    QVector<int> qvr;
    qvr << 10;
    qvr<< 20;
    qvr.append(30);
    qvr.append(40);
     qvr.append(50);
      qvr.append(60);
       qvr.append(70);
        qvr.append(80);
    qDebug()<<qvr<<endl;

    //求出QVector实例化的容器中元素的个数
    qDebug()<<QString("qvr has %1 items").arg(qvr.count());

    //删除元素
    qvr.remove(0); //删除idex == 0 的元素

    qvr.remove(2,3); //从index ==2 开始,删除后续三个元素
    //遍历所有元素
    for(int i = 0; i <qvr.count(); i++)
        qDebug()<<"qvr[i] is "<< qvr[i];

    //包含某个元素
    qDebug()<< qvr.contains(10);  //false  已经移除
    qDebug()<< qvr.contains(70);   //true  包含

    return a.exec();
}

所有案例的运行结果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档