Qt 2 QMap&QHash&QVector类实例

1. QMap

   // 1:QMap的使用
    // 创建一个QMap 实例 key 为 QString value 为 int
    QMap<QString,int> Grade;
    // 插入方式有两种插入方式
    // 1.map[key] = value
    Grade["语文"] = 90;
    Grade["数学"] = 120;
    // 2.map.insert(key,value);
    Grade.insert("英语",89);
    // 删除key
    Grade.remove("语文");
    qDebug() << Grade ;
    // 普通打印
    qDebug() << Grade ;
    // 循环打印Map
    // 1.通过迭代器实现 (java类型实现)
    QMapIterator<QString,int> itr(Grade);
    // while循环输出
    while (itr.hasNext())
    {
        itr.next();
        qDebug() << itr.key() << itr.value();
    }
    qDebug() << endl;
    // 2.STL类型迭代器
    QMap<QString,int>::const_iterator stl_itr = Grade.constBegin();

    while(stl_itr != Grade.constEnd())
    {
        qDebug() << stl_itr.key() << stl_itr.value();
        stl_itr++;
    }

    // 在QMap中查找

    // 根据KEY 查找对应的值
    //1.
    qDebug() << Grade["数学"] <<endl;
    //2.
    qDebug() << Grade.value("数学") <<endl;

    // 根据值来查找Key
    qDebug() << Grade.key(120);


    // 修改键值
    // 一个键对应一个值,调用insert 将覆盖原有的键
    Grade.insert("英语",118);
    qDebug() << Grade.value("英语") <<endl;

    // 判断键是否存在?
    qDebug() << Grade.contains("数学") <<endl;

    // 输出Qmap对象的键和值
    QList<QString> Keys = Grade.keys();
    QList<int> Values = Grade.values();
    qDebug() << "key: " << Keys;
    qDebug() << "value: " << Values;

    // 一个键对应多个值 QMultiMap 类
    QMultiMap<QString,QString> MultiMap;
    MultiMap.insert("stu","id");
    MultiMap.insert("stu","name");
    MultiMap.insert("stu","grade");
    MultiMap.insert("stu","sex");
    MultiMap.insert("stu","age");

qDebug() << MultiMap;

2. QHash

QHash<Key,T>具有与 QMap ,几乎完全相同的 API.QHash 维护着一张哈希表(Hash Table),哈希表的大小与 QHash 的数据项的数目相适应。QHash 以任意的顺序组织它的数据。当存储数据的顺序无关紧要时,建议使用 QHash 作为存放数据的容器。

QMap 与 QHash 区别:QHash 与 QMap,的功能差不多,但 QHash 的查找速度更快;QMap,是按照键的顺序存储数据,而 QHash ,是任意顺序存储的QMap,的键必须提供"<”运算符,而 QHash的键必须提供“=="运算符和个名为 gHash0的全局散列函数,

 // QHash类
    QHash<QString,int> Hash;
    Hash["key 1"] = 3;
    Hash["key 1"] = 8;
    Hash["key 4"] = 9;
    Hash["key 2"] = 1;

    // 插入hash数据
    Hash.insert("key 3",30);

    // 获取键列表
    QList<QString> key_list = Hash.keys();

    // 循环打印
    for (int var = 0; var < key_list.length(); var++) {
        qDebug() << key_list[var] << "," << Hash[key_list[var]] <<endl;
    }

    // QHash内部的迭代器 QHashIterator 用法与 QMapIterator 一样

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

    QHash<QString,int>::const_iterator itr;

    for (itr=hash.begin(); itr!=hash.end(); itr++)
    {
        qDebug() << itr.key() << ":" << itr.value() << endl;
    }

3. QVector

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

// QVector类
    // QVector<T> 是QT的一个容器类
    QVector<int> qvr;
    // QVector存储的第一种方式
    qvr << 10;
    qvr << 20;
    qvr << 30;
    // 第二种
    qvr.append(50);
    qvr.append(60);
    qvr.append(70);

    qDebug() << qvr << endl;

    // 查看QVector中的元素的个数
    qDebug() << qvr.count() << endl;

    // 删除Qvector中的元素
    qvr.remove(0);
    // 循环打印
    for (int i = 0; i < qvr.count(); i++) {
        qDebug() << qvr[i] << endl;
    }

    qDebug() << endl;
    // 从第二个元素开始 删除后面三个元素
    qvr.remove(2,3);
    // 循环打印
    for (int i = 0; i < qvr.count(); i++) {
            qDebug() << qvr[i] << endl;
    }

    // 判断是否包含元素 QVector::contains() -> bool

    qDebug() << qvr.contains(40) << endl;

相关推荐

  1. Qt 2 QMap&QHash&QVector实例

    2024-04-14 12:46:03       17 阅读
  2. QT基础篇(2QT5模板库,工具及控件

    2024-04-14 12:46:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 12:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 12:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 12:46:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 12:46:03       20 阅读

热门阅读

  1. 设计模式,模板方法模式、原型模式

    2024-04-14 12:46:03       16 阅读
  2. MYSQL原理学习篇简记(三)

    2024-04-14 12:46:03       21 阅读
  3. 爬虫开发教程

    2024-04-14 12:46:03       19 阅读
  4. 蓝桥杯算法题:小数第n位

    2024-04-14 12:46:03       17 阅读
  5. Qt第六章对话框

    2024-04-14 12:46:03       21 阅读
  6. SpringBoot 异步延时任务

    2024-04-14 12:46:03       38 阅读
  7. Asp.net 使用了 bootstrap,发布时样式丢失了

    2024-04-14 12:46:03       20 阅读
  8. Hadoop MapReduce解析

    2024-04-14 12:46:03       17 阅读