哈希桶不是使用更改状态来表示删除,而是采用了链表的删除和插入操作。因为采取了链表和vector结合的做法,所以在结点设计上删去了_status(状态),增加了一个指向下一个结点的指针_next。
template<class K, class V>
struct HashTableBucketNode
{
K _key;
V _value;
HashTableBucketNode<K, V>* _next;
HashTableBucketNode(const K& key, const V& value)
:_key(key)
, _value(value)
, _next(NULL)
{
}
};
template<class K>
struct _HashFunc
{
//用来计算key的仿函数
size_t operator()(const K& key)
{
return key;
}
};
template<>
struct _HashFunc<string>
{
//特化string版本
static size_t BKDRHash(const char*str)
{
unsigned int seed = 131;// 31 131 1313 13131 131313
unsigned int hash = 0;
while (*str)
{
hash = hash*seed + (*str++);
}
return(hash & 0x7FFFFFFF);
}
size_t operator()(const string& key)
{
return BKDRHash
版权声明:本文为dream8834原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。