栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STL 学习总结八 —— map && set

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL 学习总结八 —— map && set

文章目录
  • map && set
    • 相同点与不同点
    • 优缺点
    • 细节

map && set 相同点与不同点

共同点:

都是C++的关联容器,只是通过它提供的接口对里面的元素进行访问,底层都是采用红黑树实现。

不同点:

  • set: 用来判断某一个元素是不是在一个组里。
  • map: 映射,相当于字典,把一个值映射成另一个值,可以创建字典
优缺点

优点:

查找某一个数的时间为 O ( l o g n ) O(logn) O(logn); 遍历时采用iterator,效果不错。

缺点:

每次插入值的时候,都需要调整红黑树,效率有一定影响

细节

1. 为什么要成倍的扩容,而不是一次增加一个固定大小的容量呢?

​ 采用成倍的方式扩容,可以保证常数级的时间复杂度,而增加固定大小的容量,只能达到 O ( n ) O(n) O(n)的时间复杂度。

2. 为什么是以两倍的方式扩容,而不是三倍、四倍,或者其他方式呢?

考虑可能产生的堆浪费,所以增长的倍数不能太大,一般是1.5或2;GCC是2, VS是1.5, k=2每次扩展的新尺寸,必然刚好大于之前分配的总和,之前分配的内存空间不可能被使用,这样对于缓存并不友好,采用1.5倍的增长方式可以更好地实现对内存的重复利用。

C++ 并没有规定扩容因⼦ K ,这是由标准库的实现者决定的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号