文章目录
1. 将哈希表进行改装
我们首先将传入的key和kv的类型改变成泛型:
所以其余用到kv的地方也都改成data。因为我们改成data了,所以我们要取里面的key,我们还要加上一个仿函数。
如果是set就返回key,如果是map就返回kv的first。这样就可以在data中找到key。
然后,我们还需要将HashFunc移动到上一层,因为如果我们传自定义类型时,写仿函数要在哈希桶里面写,这样就是修改库。
map也是一样的道理。
2. 迭代器的实现
2.1 迭代器的结构
迭代器的成员变量是:结点的指针和哈希桶的指针。
因为编译器是向上查找,所以我们在使用HashBarrel的时候需要声明。
构造函数:
2.2 哈希桶构造迭代器
在哈希桶里,我们需要实现迭代器的begin和end。
代码实现:
begin就是第一个不为空的桶,end就为空。
因为这里我们要使用HashBarrel里面的_tables,但是这是私有的,我们需要设置有元:
2.3 迭代器+ +的实现
从标准库里面可以看到它是一个单向迭代器,不需要考虑- -的。
那么我们如何实现迭代器++呢?
如果在一个桶里,就迭代到下一个结点。如果一个桶走完,就找下一个不为空的桶。
代码实现:
2.4 迭代器==和!=的实现
就用结点的指针来比较就行了。
2.4 迭代器*和—>的实现
2.5 将哈希表的find和insert进行修改
3. un_set和un_map最后的封装
3.1 begin和end