STL容器之关联容器

1. 平衡二叉树

  难点主要在于插入和删除上面,尤其是在破坏平衡条件的情况下,其它的都是常规操作。

  对于破坏最深的那个节点,插入有四种情况:

  i. LL型,插入的地方在其左子节点的左子树,此时进行一次右旋即可。

  ii. RR型,插入的地方在其右子节点的右子树,此时进行一次左旋即可。

  iii.  LR型,插入的地方在其左子节点的右子树,此时先进行一次左旋操作,然后再进行一次右旋操作。

  iX.  RL型,插入的地方在其右子节点的左子树,此时先进行一次右旋操作,然后再进行一次左旋操作。


2.  红黑树

  规则定义:

  1. 每个节点不是红色就是黑色。

  2. 根节点为黑色。

  3. 如果节点为红,其子节点必须为黑。

  4. 任一节点至尾端的任何路径,所含黑节点数必须相同。

  根据规则4,新增节点必须为红;根据规则3,新增节点的父节点必须为黑。


3. set

  所有元素都会根据元素的键值自动被排序,只有一个值,不允许有相同的值。

  不可以通过set迭代器改变set的元素值,它被定义为const_iterator。

  进行删除和新增操作后,原有的迭代器依然有效。


4. map

  所有的元素都会根据元素的键值自动被排序,所有元素都是pair,同时拥有实值和键值,不允许有相同的键值。

  不可以通过map迭代器改变map的键值,它既不是常量迭代器,也不是mutable iterator。


5. multiset和multimap

  multiset的特性与set相同,唯一的差别在于它允许键值重复。multimap与map也是同样的情况。


6.  hashtable

  提供任何有名项的存取操作和删除操作,由于操作对象是有名项,可被视为字典结构。在插入,删除,搜寻等操作上具有“常数平均表现时间”的表现。

  存储是可能会出现冲突,解决冲突的方法:线性探测,二次探测,开链等。

  hashtable的桶子(bucket)与节点(node),bucket所维护的link list是hashtable的node,一个后继指针与一个值。bucket的聚合体是由vector完成,以便有动态扩充能力。

  hashtable的迭代器没有后退操作,也没有定义逆向迭代器。


7. hash_set

  底层以hashtable实现,所以set有自动排序,但是hash_set没有。

  另外当插入的数字都小于桶的数量时,容易给人造成已排序的假象。

  hash_map的描述与hash_set一样,类似的还有hash_multiset,hash_multimap。


  总结: 这个知识点也不难,很好掌握的,复杂点的可能也就是平衡二叉树与红黑树的插入和删除了,看了一下,实现起来也不难,准备接下来自己写代码实现一下,然后面试的时候,能快速的手写出来,应该也是亮点吧。

  

  

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值