STL MAP, STL SET 是C++中非常重要的数据结构之一,它们提供了非常方便的操作接口,使得在C++中可以非常方便地实现对于有序和无序关联数据的存储和操作。本文通过列举一些基本的问题,以及对这些问题的解答,来讲解了STL关联容器内部的数据结构。并且最后探讨了关于UNIX/LINUX自带平衡二叉树库函数和map,set的选择问题,并对map,set的优势进行了分析。这对于希望深入学习STL和希望了解STL map等关联容器底层数据结构的朋友来说,具有一定的参考价值。 STL map和set的使用虽然并不复杂,但是很多地方并不容易理解。例如,为何map和set的插入删除效率比使用其他序列容器要高?为何每次insert之后,以前保存的iterator不会失效?为何map和set不能像vector一样有个reserve函数来预分配数据?当数据元素增多时,例如从10000个到20000个时,map和set的插入和搜索速度将会有怎样的变化?或许有一些人能够回答出这些问题的大概原因,但是要深入地理解,还需要了解STL的底层数据结构。 STL之所以得到广泛的赞誉,也被很多人使用,不仅是因为它提供了非常方便的数据结构和算法接口,更重要的是,它的底层实现非常高效。STL map和set的实现使用了平衡二叉树(红黑树)的数据结构,这使得它们能够在对数时间内完成插入、删除和搜索等操作。而其他序列容器,例如vector,它们的底层实现使用的是数组,因此在插入和删除等操作时需要进行元素的移动,效率不如map和set。至于为何map和set不能像vector一样有一个reserve函数来预分配数据,这是由于平衡二叉树的特性决定的,它们的插入和删除操作并不需要连续的内存空间,因此也就没有必要预分配连续的内存空间。 当数据元素增多时,map和set的插入和搜索速度也会有所变化。由于平衡二叉树的特性,它们的插入和搜索操作的时间复杂度是对数级别的,因此在数据量较大时,map和set的性能依然能够保持在一个较高的水平,这也是它们被广泛使用的原因之一。而对于insert操作之后,原来保存的iterator不会失效的原因,这是由于map和set的底层实现是使用平衡二叉树,插入操作并不会改变树的结构,因此原来保存的iterator依然有效。 总的来说,STL map和set作为C++中非常重要的数据结构之一,其内部的数据结构使用了平衡二叉树,使得它们具有了非常高效的插入、删除和搜索等操作。理解STL map和set的底层数据结构,对于提高C++程序的性能和效率,具有非常重要的意义。希望通过本文的介绍,能够帮助读者更好地理解STL map和set的内部实现,并能够更好地应用它们在实际的开发过程中。
![](https://csdnimg.cn/release/download_crawler_static/571610/bg3.jpg)
剩余14页未读,继续阅读
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/7926518499f547639f1937dcfe216790_lujing_angelar.jpg!1)
- 粉丝: 9
- 资源: 37
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)