在看OpenFOAM中的字典类时,其中有一个哈希表成员,所以今天就看看OpenFOAM中的哈希表类是怎么实现的!
我们知道哈希表一般是用来就是用来节省数据的存储和查找消耗的时间,所以在OpenFOAM这种要进行大量数据存储、查找及其他处理的计算程序中使用这样的类也就不足为奇了,那么它是怎样实现的呢,我们来看看!
首先看他的模板参数
template<class T, class Key=word, class Hash=string::hash>
class HashTable
其中T表示表中存储的数据的类型,Key为关键字(默认为word类)用于进行哈希函数运算的参数,Hash为使用的哈希函数(默认值为string类的内嵌类hash),我们先看看string中的hash是怎么定义的:
class hash
{
public:
inline hash();
inline size_type operator()(const string& key) const;
inline size_type operator()
(
const string& key,
const size_type tableSize
) const;
};
从中可见有两个版本的哈希函数:一个只有一个string引用参数,另一个有两个参数(string& 和 size_type);
前者根据关键字key通过hashVal = hashVal<<1 ^ *iter;算得hash值
后者通过hashVal=|hashVal|%tableSize来算的哈希值。
评论