联合容器和集合容器
- 一.QMap
- 1.应用场景
- 2.添加数据
- 3.删除数据
- 4.修改数据
- 5.查找数据
- 6.数据个数
- 7.是否包含
- 8.返回所有的键名
- 二.QHash
- 1.应用场景:
- 三.QMultiMap
- 四.QMultiHash
- 五.QSet
- 1.应用场景
- 2.交集
- 3.并集
- 4.差集
- 总结:
一.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,到这里咱们的容器也就讲完了,接口确实很多,但是大部分都是通用的,因此不比害怕。
更重要的是知道我们该如何去选择合适的容器。
一般底层是类似数组的就查询快
底层实现里面有指针的就插入删除快
一般需要键值的就用联合容器
需要唯一性的就集合容器等等
谢谢你的阅读,希望能帮到你。
雷军是我偶像,永远相信美好的事情即将到来!