哈希表常用数据结构---set

        上一篇文章我讲了在使用哈希法时什么时候使用数组,这篇文章主要讲什么时候使用set作为我们的哈希表.

        数组有个缺点:它是静态的,分配多少空就只能有这么多空间.所以在将数据元素映射为数组的索引时,若元素的值比较大,那么映射的数组就需要很大,但结果存的有效数据就那么几个.这样会使得存储利用率太低了,而这时候就需要使用set了.

        set是可以扩充的,你插一个它存一个,不会造成内存的跳跃式浪费,可以很好的弥补数组的不足,但总体上的效率还是不如数组的.另一个方面我们需要知道set有三种:set.multiset,unordered_set.它们三者有所不同:

        set内部实现是红黑树,其插入的元素是不能重复的,同时还会进行排序(默认为从小到大),它的查询,增删效率为O(logN).若题目要求有序,且不能重复就可以使用set作为哈希表.

        multiset内部实现也是红黑树,同时插入的元素也是默认按从小到大进行排序,但元素是可以重复的,它的查询,增删效率和set的一样.若题目要求元素可以重复就可以使用multiset.

        unordered_set内部实现是哈希表,它插入的元素是无序的,且元素不能重复,但它的效率却是三者中最高的,它的查询,增删效率都是O(1)!!!若题目对元素顺序没什么要求,且元素不能重复,我们就可以使用unordered_set来作为哈希表了.

        以上就是有关set作为哈希表的一些基本知识点总结,希望能帮助大家.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值