修改哈希表
我们基于链地址法实现的哈希表来封装实现 unordered_set 和 unordered_map ,但是由于实现的哈希表是 Key-Value 结构的并且我们的实现的哈希表缺少了迭代器,所以我们需要对之前实现的哈希表进行改造。
模板参数
HashNode
节点里不再存储确定的 pair<K, V> ,而是类型 T ,代表存储的数据可能是 key 或者 key-Value 。
template<class T>
struct HashNode {
T _data;
HashNode<T>* _next;
HashNode(const T& data):_data(data),_next(nullptr){}
};
HashTable
template<class K,class T,class KeyOfT,class hash= HashFunc<K>>
class HashTable
K:代表的是keyT:代表是存的可能是key或者key-valueKeyOfT:仿函数,目的是拿到T里面的key
迭代器
哈希表的迭代器其实就是对节点指针进行封装,而且是单向迭代器,只需实现 ++ 即可。
//哈希表与迭代器相互依赖,需要前置声明
template<class K,class T,class KeyOfT,class hash>
class HashTable;
template< , , , , , >
{
HashNode<T> Node;
HashTable<K, T, KeyOfT, Hash> HT;
HTIterator<K, T, KeyOfT, Hash, Ref, Ptr> Self;
Node* _node;
HT* _pht;
(Node* node, HT* pht):_node(node),_pht(pht){}
Ref *(){ _node->_data;}
Ptr ->(){&_node->_data;}
!=( Self& s){ _node != s._node;}
Self& ++(){
};







