我有一个相当简单的分配来检查哈希表,我们必须创建一个模板类,并使用浮点数,整数和STL字符串作为关键数据类型对其进行测试。
我有类似的设置:
template<class K, class T>
class hashTable{
public:
private:
};
当我打电话给班级测试时,我使用:
hashTable<float, data>
hashTable<int, data>
等...我只是不确定如何根据我调用函数时使用的数据类型,让类使用我对每种数据类型的哈希函数。
答案 0 :(得分:1)
我至少看到三种方法:
首先。为您的所有类型创建一个重载函数hash
:
hash_t hash(int);
hash_t hash(float);
并在hashTable
中拨打hash()
。
二。创建一个单独的模板化类(或者,一个函数)hash<T>
,并将其专门用于int
,float
等。然后在hastTable
中将其引用为一般方式hash<K>
:
template<class T> class hash;
template<> class hash<int> { hash_t operator() {...} };
template<> class hash<float> { hash_t operator() {...} };
第三。通过模板参数向hashTable
提供所需的类或函数,就像标准std::sort
接收到的比较函数一样:
template<class K, class T, class Hash>
class hashTable...
答案 1 :(得分:0)
我建议你像标准那样做。为哈希函数添加模板参数,然后使用标准哈希。如果您有一个标准哈希不适用的自定义类型,那么您可以实现自己的类型并将其包含在模板参数中。
template<class K, class T, class Hash = std::hash<K>>
class hashTable{
// stuff
};