在前几章内容我们主要介绍了hash_table的实现原理,包含了线性探测、二次探测,那么接下来我们来实现一下unordermap、unorderset。
一、概述
unordermap、unorderset在底层是使用Hash_table的拉链法(哈希桶)的方法,即unordermap、unorderset的实现依靠了Hash
_Table,所以我们来简单的封装下之前用开链法实现的Hash_Table即可完成所需。
二、实现代码
template<class K, class V, class HashFunc = __HashFunc<K>>
class UnorderMap
{
typedef HashTable<K, V, HashFunc> Hash;
public:
typedef typename Hash::Iterator Iterator;
typedef typename Hash::const_Iterator const_Iterator;
UnorderMap()
{}
//插入函数
pair<Iterator, bool> Insert(const pair<K, V> & kv)
{
return _ht.Insert(kv);//直接调用 hash表的函数
}
bool Erase(const K& key)
{
return _ht.Erase(key);//调用 删除函数
}
Iterator Find(const K& key)
{
return _ht.Find(key);//调用查找函数
}
Iterator Begin()
{
return _ht.Begin();//直接调用
}
const_Iterator Begin()const
{
return _ht.Begin();
}
Iterator End()
{
return _ht.End();
}
const_Iterator End()const
{
return _ht.End();
}
void Print()
{
_ht.Print();
}
protected:
Hash _ht;
};