STL源码剖析-----关联式容器

一、set

        所有元素都会根据元素的键值自动排序,set元素不像map那样可以同时拥有key和value,set元素的键值就是实值,set不允许有两个相同元素的键值。


二、map

       所有元素都会根据元素的键值自动排序,map不允许有两个元素有相同的键值。以红黑树作为底层机制,每一个节点上的内容是一个pair,pair的第一个元素是键值,第二个元素为实值。


三、multiset

       特性与set完全相同,唯一区别键值允许重复。那是因为它的插入操作是底层机制RB-TREE的insert-equal()而非insert_unique().


四、hash_table

线性探测:循环一一寻找,如果到达尾端,就绕道头部进行下去。

二次探测:H,H+1,h+4,H+9…….

开链探测:为表格中的每一个元素维护一个list,然后在list身上执行元素的插入、搜寻、删除等操作,负载系数将大于1。SGI STL中的hash_table便是采用这种做法。SGI STL中采用质数来设计表格的大小。传入参数n时,找到大于或等于n最小的那个质数


五、hash_set

       以hash_table为底层实现机制,由于RB-tree有自动排序功能而hash_table没有,所以set元素有自动排序,而hash_set是没有的。

 

六、hash_map

      以hash_table为底层实现机制,由于RB-tree有自动排序功能而hash_table没有,所以map元素有自动排序,而hash_map是没有的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值