linear hash
一,在介绍linear hash 之前,需要对动态hash和静态hash这两个概念做一下解释:
静态hash:是指在hashtable初始化得时候bucket的数目就已经确定了,当需要插入一个元素的时候,通过hash函数找到对应的bucket number,之后插入即可。不论用什么冲突解决方法,当插入的元素越来越多时,在这个hash表中查找元素的效率会变的越来越低。
动态hash:是指在hashtable的bucket的数目不是确定的,而是会根据插入元素的多少而实现动态的增减,当元素变多得时候,bucket会动态增加,这样就可以解决静态hash的查找效率低得问题。当元素变少得时候,bucket会动态减少,从而减少空间的浪费。linear hash就是一种动态hash。
二。linear hash实现.
对于hash操作,主要有insert, find, erase三个操作,下面对linear_hash的3个操作做一些解析:
1. Find.
对于查找操作,目的是输入key值,找出对应的卫星数据的值,这一操作和其他hash操作一样。
bool find(KeyType iKey, DataType& oData)
{
int lKey = hashfunc(iKey);
if(lKey < 0 || lKey >= numBucket) return false;
bucketIter iter = mhashTable[lKey].begin();
for(; iter != mhashTable[lKey].end(); iter ++)
{
if(iter->first == iKey)
{
oData = iter->second;
return true;
}
}
return false;