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两种数据结构
-
为什么map和set的插入删除比其它容器的效率高?
对于关联式容器来说,不需要做内存的拷贝和内存的移动,他们的存储方式是以节点的方式存储,只需要保留对父子节点的指针,所以实现插入和删除的时候只需要移动节点的指针。 -
insert的时候迭代器会不会失效?
不会失效,map和set的节点是malloc申请出来的,尽管insert了新的节点,内存并没有变,变得只是指针的指向。所以insert的时候迭代器并不会失效。但是对于序列式容器来说来说,当插入一个新的元素,有可能需要扩容,因为需要保证内存的连续存放,所以会引起迭代器的失效。 -
为什么直接使用函数会比STL中的map,set快? – 其实问的是空间配置器
如果直接使用这些函数的话,你会自己申请很多的节点,而且频繁的插入和删除的时候,内存碎片就会存在,STL采用的是空间配置器Allocator分配内存,采用内存池+l链表的方式管理内存,大大减少了内存碎片的使用