C++ map和set的常见问题

C++中的map和set作为关联式容器,其插入和删除效率高于其他容器,因为它们基于节点存储,仅需移动指针。插入迭代器不会失效。map底层使用红黑树实现,保证查找、插入、删除的O(logn)复杂度。红黑树优于Val树在于其近似平衡特性,减少旋转次数。set与map的主要区别在于map支持键值对的修改,而set不允许,因为其value本身就是key。
摘要由CSDN通过智能技术生成

map和 set 相关的问题

1. 为什么map和set的插入删除比其它容器的效率高?
2. insert的时候迭代器会不会失效?
3. 为什么直接使用函数会比STL中的map,set快?
4. 为什么map的底层要用红黑树实现(不用val树)?
5. 红黑树与Val树的区别
6. 关联式容器的插入,删除效率 为什么比序列式的容器高?
7. 红黑树和哈希表的迭代器类型
8. map和set的区别
9. set中的元素为什么不允许修改?
10.为什么multimap不支持[]
11.红黑树如何实现出map和set两种数据结构
  1. 为什么map和set的插入删除比其它容器的效率高?
    对于关联式容器来说,不需要做内存的拷贝和内存的移动,他们的存储方式是以节点的方式存储,只需要保留对父子节点的指针,所以实现插入和删除的时候只需要移动节点的指针。

  2. insert的时候迭代器会不会失效?
    不会失效,map和set的节点是malloc申请出来的,尽管insert了新的节点,内存并没有变,变得只是指针的指向。所以insert的时候迭代器并不会失效。但是对于序列式容器来说来说,当插入一个新的元素,有可能需要扩容,因为需要保证内存的连续存放,所以会引起迭代器的失效。

  3. 为什么直接使用函数会比STL中的map,set快? – 其实问的是空间配置器
    如果直接使用这些函数的话,你会自己申请很多的节点,而且频繁的插入和删除的时候,内存碎片就会存在,STL采用的是空间配置器Allocator分配内存,采用内存池+l链表的方式管理内存,大大减少了内存碎片的使用

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值