使用基于模板 class 类型的单独函数

Using separate functions based on template class type

我有一个相当简单的作业来检查哈希表,我们必须创建一个模板 class 并使用浮点数、整数和 STL 字符串作为关键数据类型对其进行测试。

我的 class 设置如下:

 template<class K, class T>
 class hashTable{
     public:
     private:
 };

当我调用 class 进行测试时,我使用:

hashTable<float, data>
hashTable<int, data>

等等...我只是不确定如何让 class 根据我在调用函数时使用的数据类型为每种数据类型使用哈希函数。

我看到至少三种方法:

首先。为所有类型创建一个重载函数 hash

hash_t hash(int);
hash_t hash(float);

并在 hashTable 中调用 hash().

第二。创建一个单独的模板化 class(或者,一个函数)hash<T> 并将其专门用于 intfloat 等。然后在 hastTable 中引用它一般方式为 hash<K>:

 template<class T> class hash;
 template<> class hash<int> { hash_t operator() {...} };
 template<> class hash<float> { hash_t operator() {...} };

第三。通过模板参数向 hashTable 提供所需的 class 或函数,就像标准 std::sort 接收比较函数的方式:

template<class K, class T, class Hash>
class hashTable...

我建议你按照标准来做。为散列函数添加一个模板参数,然后使用标准散列。如果您有标准散列不适用于的自定义类型,那么您可以自己实现并将其包含在模板参数中。

template<class K, class T, class Hash = std::hash<K>>
class hashTable{ 
// stuff 
};