zoukankan      html  css  js  c++  java
  • 16.QT-QMap和QHash解析

    QMap

    • QMap原型为class QMap <K,T>,其中K表示键,T表示值,K和T属于映射关系.
    • QMap会根据K来自动进行升序键排序
    • QMap中的K类型必须重载operator < 

    QMap常用函数如下:

    const Key QMap::key ( const T & value );
                                //通过值来找键,若未找到则返回0,由于只对K键进行排序,所以该函数不是快速查找
    
    const T QMap::value ( const Key & key );
                            //通过键来查找值, 若未找到则返回0,由于K键已进行排序,所以属于快速查找

    QMap示例:

    QMap<QString, int> map;          //定义键为QString型,值为int型
    
    map["key 1"] = 3;
    map["key 1"] = 1;                //更新key 1的值
    map["key 4"] = 4;
    map["key 2"] = 2;
    map.insert("key 3", 3);          //等价于: map["key 3"] = 3;
    
    QList<QString> list = map.keys();
    
    for(int i=0;i<list.length();i++)
    {
       qDebug()<< list[i]<<","<< map.value(list[i]) ;
    } 

    打印:

    "key 1" , 1
    "key 2" , 2
    "key 3" , 3
    "key 4" , 4

    也可以使用QMapIterator迭代器来遍历整个QMap

    QMapIterator常用函数如下:

    void toFront ();       //使迭代器的游标指向容器的头部
    
    void toBack ();       //使迭代器的游标指向容器的尾部
    
    Item next ();        //返回map中的下一项,并使迭代器的游标指向下一项
    
    Item previous ();    //返回map中的上一项,并使迭代器的游标指向上一项
    
    bool hasNext ();     //若迭代器的游标指向的map还有下一项,则返回true,,若为空则返回false
    
    bool hasPrevious ();  //若迭代器的游标指向的map还有上一项,则返回true,,若为空则返回false
    
    const Key &  key ();  //返回上一项的键(key)和数值(value);
    
    const T& value();    //返回上一项的数值(value);

    示例:

           QMap<QString, int> map;
    
            map["key 1"] = 3;
            map["key 1"] = 1;           //key 1将会覆盖之前的key 1
            map["key 4"] = 4;
            map["key 2"] = 2;
            map.insert("key 3", 3);
    
            QMapIterator<QString, int> it(map);
    
            while(it.hasNext())
            {
                it.next();
                qDebug()<<it.key()<<","<<it.value();
            }

    在QMap类里也封装了一个  const_iterator 迭代类,也可以通过它来遍历整个QMap

    示例如下:

    QMap<QString, int> map;
    
    map["key 1"] = 3;
    map["key 1"] = 1;           //key 1将会覆盖之前的key 1
    map["key 4"] = 4;
    map["key 2"] = 2;
    map.insert("key 3", 3);
    
    QMap<QString, int>::const_iterator it;
    
    for(it = map.begin();it!=map.end();it++)
    {
         qDebug()<< it.key()<<","<<it.value();
    }

     

    QHash

    • QHash原型为class QHash<K,T>,其中K表示键,T表示值,K和T属于映射关系.
    • 和QMap不同的是,QHash中的键值对不会进行自动排序,而是更据Hash值存储
    • QHash中的Key类型必须重载operator ==
    • QHash中的Key对象必须重载全局哈希函数qHash()
    • 由于QHash通过Hash表存储,所以查找比QMap快

    QHash常用函数和QMap类似,示例如下:

    QHash<QString, int> hash;
    
    hash["key 1"] = 3;
    hash["key 1"] = 1;           //key 1将会覆盖之前的key 1
    hash["key 4"] = 4;
    hash["key 2"] = 2;
    hash.insert("key 3", 3);
    
    QList<QString> list = hash.keys();
    
    for(int i=0;i<list.length();i++)
       qDebug()<<list[i]<<","<<hash.value(list[i]);

    运行打印:

    "key 1" , 1
    "key 2" , 2
    "key 3" , 3
    "key 4" , 4

    QHash的迭代器QHashIterator类用法,和QMap的使用方法一样.

    QHash内部也封装了一个  const_iterator 迭代类,和QMap的使用方法也一样,比如:

            QHash<QString, int> hash;
    
            hash["key 1"] = 3;
            hash["key 1"] = 1;           //key 1将会覆盖之前的key 1
            hash["key 4"] = 4;
            hash["key 2"] = 2;
            hash.insert("key 3", 3);
    
            QHash<QString, int> ::const_iterator it;
    
            for(it=hash.begin();it!=hash.end();it++)
               qDebug()<<it.key()<<","<<it.value();

     

    QMap和QHash区别

     

     

     

  • 相关阅读:
    交叉编译工具链
    QNX Hypervisor管理程序
    DSP与CEVA芯片
    Runtime系统
    使用Xjar对jar文件进行加密,防止反编译
    有10个线程, 主线程怎么等待10个线程执行完之后才执行
    vue——使用echart后,字体模糊问题
    css——background属性设置background-size
    echart——宽度设置无效问题
    js——实现缩略图滑动,实际图对应滑动
  • 原文地址:https://www.cnblogs.com/lifexy/p/8986016.html
Copyright © 2011-2022 走看看