STL-hashtable

【1】    hashtable如何避免地址冲突

(1)    线性测探:先用hash function 计算某个元素的插入位置,如果该空间的位置已经被占用,则继续往下找,直到找到一个可用地址为止。其删除采用随机删除只标记删除记号,实际操作等表格整理好在进行

(2)    二次探测:如果计算出的位置为H,并且已经被占用了,则一次尝试H+1*1,H+2*2等(解决线性冲突住集团问题)

(3)    开链:每一个表格元素中维持一个list,hash function为我们分配一个list 然后在那个list执行插入删除操作

【2】    Hashtable,hash_set,hash_map的区别

(1)    Hash_set 以hashtable为底层结构,不具有排序功能,能快速查找,其键值就是实值(set的底层结构是以红黑树,具有排序功能)

(2)    Hash_map以hashtable为底层结构,不具有排序功能,能快速查找,每个元素同时拥有一个实值和键值(map的底层结构是以红黑树,具有排序功能)

【3】    Hash_map与map的区别,什么时候用map,什么时候用hash_map

(1)    构造函数:hash_map需要hash function等函数,而map需要比较函数

(2)    存储结构:Hash_map以hashtable为底层结构,map的底层结构是以红黑树

(3)    hash_map的查找速度比map快而查找的速度基本与数据量的大小无关,属于常数级别,而map的查找速度属于log级别,但不一定常数比log小,而且hash_map还有hash function的耗时,如果考虑效率,特别当元素达到一定量级的数量时用hash_map,考虑内存的时候或者元素数量较小的时候,用map

【4】    hash_map与hashtable的区别

(1)    hashtable是dictionary的子类,而hash_map是map接口的一个实现类

(2)    hashtable中的方法是同步的,hash_map中的方法是不同步的


猜你喜欢

转载自blog.csdn.net/m0_37947204/article/details/80134678
STL