哈希表的实现(哈希桶 开链法)

  • Post author:
  • Post category:其他


哈希桶不是使用更改状态来表示删除,而是采用了链表的删除和插入操作。因为采取了链表和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 版权协议,转载请附上原文出处链接和本声明。