上一篇文章我讲了在使用哈希法时什么时候使用数组,这篇文章主要讲什么时候使用set作为我们的哈希表.
数组有个缺点:它是静态的,分配多少空就只能有这么多空间.所以在将数据元素映射为数组的索引时,若元素的值比较大,那么映射的数组就需要很大,但结果存的有效数据就那么几个.这样会使得存储利用率太低了,而这时候就需要使用set了.
set是可以扩充的,你插一个它存一个,不会造成内存的跳跃式浪费,可以很好的弥补数组的不足,但总体上的效率还是不如数组的.另一个方面我们需要知道set有三种:set.multiset,unordered_set.它们三者有所不同:
set内部实现是红黑树,其插入的元素是不能重复的,同时还会进行排序(默认为从小到大),它的查询,增删效率为O(logN).若题目要求有序,且不能重复就可以使用set作为哈希表.
multiset内部实现也是红黑树,同时插入的元素也是默认按从小到大进行排序,但元素是可以重复的,它的查询,增删效率和set的一样.若题目要求元素可以重复就可以使用multiset.
unordered_set内部实现是哈希表,它插入的元素是无序的,且元素不能重复,但它的效率却是三者中最高的,它的查询,增删效率都是O(1)!!!若题目对元素顺序没什么要求,且元素不能重复,我们就可以使用unordered_set来作为哈希表了.
以上就是有关set作为哈希表的一些基本知识点总结,希望能帮助大家.