【qt】联合容器和集合容器

发布于:2024-05-15 ⋅ 阅读:(148) ⋅ 点赞:(0)

一.QMap

1.应用场景

QMap的底层实现是用的平衡二叉树(红黑树),是一种有序的关联容器。
键可以理解为一种索引值,如现实生活中的身份证号,一个身份证号只能对应一个公民。
键与值是一种一一对应的关系。

QMap是以键值对的形式进行保存数据.只能一个键对应一个值。

2.添加数据

通过insert插入键值对

在这里插入图片描述
运行结果:
在这里插入图片描述

3.删除数据

用remove(键),对应的值也会一同被删除

在这里插入图片描述
运行结果:
在这里插入图片描述

4.修改数据

因为键与值是一一对应的,所以要修改值,可以通过重新插入覆写里面的值。

在这里插入图片描述

运行结果:
在这里插入图片描述

还可以通过找到键的迭代器然后进行修改

在这里插入图片描述

运行结果:
在这里插入图片描述

5.查找数据

因为QMap是有序的,所有我们可以同过[键]来查找值。
也可以通过value()这个接口来查找。

在这里插入图片描述
运行结果:
在这里插入图片描述

还可以通过find()查找,不过返回的是迭代器,需要*解引。

在这里插入图片描述
运行结果:
在这里插入图片描述

6.数据个数

count(),查键的个数只能是1。因为一对一关系。

在这里插入图片描述
运行结果:
在这里插入图片描述

7.是否包含

contains()

在这里插入图片描述
运行结果:
在这里插入图片描述

8.返回所有的键名

keys(),将建名保存在一个QList< QString >中。

在这里插入图片描述
运行结果:
在这里插入图片描述

二.QHash

1.应用场景:

QHash的底层实现是用的哈希表,也是存放的键值对,只不过是无序的。

查找的速度快,插入的速度也快

接口与QMap完全相同!

三.QMultiMap

Multi是多的意思,上面咱们不是说一个键只能对应一个值,这里则不然,一个键可以对应多个值,就像一个渣女的有多个男朋友一样
在这里插入图片描述
运行结果:
在这里插入图片描述
注意:

  • 此时就不能通过这种方式进行查找了
    在这里插入图片描述

  • 删除时如果不指定值,将全部删除相同的键
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

  • values可以得到一个键对应的所有的值
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

四.QMultiHash

和QMultiMap基本一样。

五.QSet

1.应用场景

集合大家应该都知道吧,我记得我是高一学过,我们就生活在一个个集合之中。

一个集合,不可能有两个一模一样的我,所以集合具有唯一性

底层的实现用的是哈希表,但是存储的数据不是键值对,而是一个值。

2.交集

接口几乎与哈希差不多,来讲讲不同的,首先并集
拿出我的小学的画画水平
在这里插入图片描述

用intersect(),对参数不会参数影响

来看看代码怎么实现:
在这里插入图片描述
运行结果:
addr2不变,addr变成两个所共有的
在这里插入图片描述

3.并集

就是将你我的都全部合起来。
在这里插入图片描述
代码:

用unite()

在这里插入图片描述
运行结果:
在这里插入图片描述

4.差集

就是我所特有的
在这里插入图片描述

subtract()

在这里插入图片描述
运行结果:
在这里插入图片描述

总结:

OK,到这里咱们的容器也就讲完了,接口确实很多,但是大部分都是通用的,因此不比害怕。
更重要的是知道我们该如何去选择合适的容器。

一般底层是类似数组的就查询快
底层实现里面有指针的就插入删除快
一般需要键值的就用联合容器
需要唯一性的就集合容器等等

谢谢你的阅读,希望能帮到你。
雷军是我偶像,永远相信美好的事情即将到来!在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到