哈希表基本上用这三个数据结构:
- 数组
- set
- map
当我们要判断某个元素是否在集合中出现的时候用哈希表来提高效率
1.数组类型
242. 有效的字母异位词 - 力扣(LeetCode) 这就是用了数组来记录出现次数,用哈希的思想映射过去,其中hash[s[i]-'a']++;把字母映射到了数组的索引上去
所以说数组的索引标不仅仅用来for的遍历,用哈希法则把数组的索引和数值联系起来
2.set类型
如果他题目本来就告诉你了一个范围大小,那么可以用数组,如果没告诉你可能无穷大那么用set这个数据结构
哈希表就是用来给你一个元素判断一下这个元素是否出现过
set类型的数据结构就像是vector向量一样 可以不断的增添(没有大小限制),
并且unorder_set是自动去重的(这点很特殊)
map不会自动去重的
3.map类型
每一次找都要记录前面的一个,比如我现在已经记录了2当我到7的时候我要拿7和我已经存储的2来进行条件判断
就是当我到了4的时候我此时的目的就是找以前我是否记录了2 所以要不断的记录经过的值
我们不仅要知道值,而且还要知道下标,所以这时候就用map的 key 和 value
map作用:存放我们已经遍历过的元素
根本转化为还是找一个元素是否出现过
1.这里的iter起到了相当于容器的作用(定位元素)map这里不像是数组可以通过下标来访问它,那么我们就把他拿出来,放到一个容器里暂时存放他,便于对他操作
2.我们在条件里不用==0而是用!= map.end()因为我们调用的是find函数 他找不到就继续找,这里就是这样搭配的
3.用容器的iter->second来访问value(下标)
4.插入的时候要用pair捆帮起来