C++---哈希(Hash Table)

目录

一、unordered系列关联式容器

二、哈希

1、哈希概念

2、哈希冲突

3、哈希函数

4、哈希冲突的解决


一、unordered系列关联式容器

STL库中提供了使用红黑树封装的map和set的关联式容器,查询效率可以达到logN,为了提高查询效率在C++11中,STL又提供了四个unordered系列关联式容器:unordered_set、unordered_map、unordered_multiset、unordered_multimap,它们的底层采用的是一种新的、效率更高的容器Hash来实现的。

unordered_set、unordered_map的使用方法和map和set基本相同,因此这里不在介绍他们的使用。

二、哈希

unordered_set、unordered_map底层结构是哈希表,因此在模拟实现之前先要了解哈希的基本结构、原理及简单的实现。

1、哈希概念

前边学过的STL容器中,无论是序列式容器(vector、string、list等)还是关联式容器(map、set等)它们的元素的关键码和存储位置之间没有联系,因此在查找过程中需要对关键码进行比较,查找效率相对较低。哈希是指,通过某种函数(hashFunc)使元素的存储位置和关键码之间建立一一映射关系,在查找时可以通过该函数很快找到该元素。

向哈希结构中:

  • 插入元素:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存
  • 删除元素:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功

我们把这种方法称为哈希方法,用到的函数称为哈希函数,通过该方法构造出的结构称为哈希表

你可能感兴趣的:(笔记)