相关文章推荐
高大的电影票  ·  服务器上跑的很慢-已解决_怎么在服务器上跑代 ...·  10 月前    · 
成熟的饭盒  ·  js findIndex ...·  1 年前    · 
强健的黑框眼镜  ·  JDK9之后如何引入被删除的类_jdk11 ...·  1 年前    · 
紧张的红金鱼  ·  JavaScript中的async-何时使用 ...·  1 年前    · 
玩命的火腿肠  ·  LLaMa 量化部署 - 知乎·  1 年前    · 
Code  ›  16.QT-QMap和QHash解析开发者社区
list hash函数 qstring qmap
https://cloud.tencent.com/developer/article/1137413
坏坏的丝瓜
1 年前
作者头像
诺谦
0 篇文章

16.QT-QMap和QHash解析

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Linux驱动 > 16.QT-QMap和QHash解析

16.QT-QMap和QHash解析

作者头像
诺谦
发布 于 2018-05-28 15:46:21
1.8K 0
发布 于 2018-05-28 15:46:21
举报

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;
 
推荐文章
高大的电影票  ·  服务器上跑的很慢-已解决_怎么在服务器上跑代码很慢-CSDN博客
10 月前
成熟的饭盒  ·  js findIndex 符合条件的数组第一个元素索引位置_js findindex 第一个-CSDN博客
1 年前
强健的黑框眼镜  ·  JDK9之后如何引入被删除的类_jdk11 rt.jar 没有了怎么办-CSDN博客
1 年前
紧张的红金鱼  ·  JavaScript中的async-何时使用await(何时不使用)-'await”对此表达式的类型无影响.ts(80007)
1 年前
玩命的火腿肠  ·  LLaMa 量化部署 - 知乎
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号