STL中hashtable,hashset,hashmap,set,map,multiset和multimap的区别

hashtable 可以提供任何有名项的存取操作和删除操作,由于操作对象是有名项,故可被视为一种字典结构。用意是在常数时间内提供基本操作。常见的,我们可以把int存到相应值的数组里面,就可以通过O(1)的时间存取和删除。主要思想是通过hash函数,把对象映射到一个较小的容器里面,并且保证时间复杂度。映射到较小容器很可能出现碰撞问题,解决的方法常见的有:线性探测,二次探测,开链法。STL利用vector来当容器,采用开链法来解决冲突,从而实现hashtable.hashtable只能处理char,int,short等类型,不能处理string,double,float类型,想要处理的话必须自己加hash function.

 

hashset重点在于set几个字母上,主要实现集合功能,只不过底层函数由hashtable提供,而set是由红黑树作底层,两者的唯一区别就是set默认是排好序的,而hashset不是。

hashmap重点在于map几个字母上,主要提供对象间的一一映射功能,hashmap底层由hashtable提供,而map底层由红黑树提供,区别同上。

总结:加有hash几个字的一些结构,底层都是由hashtable来提供的,不加的都是由红黑树来提供

 

至于set和multiset的区别就是后者允许键值重复,map和multimap也一样。实现时通过insert_equal()和insert_unique)来控制。

 

 

你可能感兴趣的:(C++)