前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >16.QT-QMap和QHash解析

16.QT-QMap和QHash解析

作者头像
诺谦
发布2018-05-28 15:46:21
2K0
发布2018-05-28 15:46:21
举报
文章被收录于专栏:Linux驱动Linux驱动Linux驱动

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区别

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档