使用基于模板 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>
并将其专门用于 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
提供所需的 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
};
我有一个相当简单的作业来检查哈希表,我们必须创建一个模板 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>
并将其专门用于 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
提供所需的 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
};