【问题标题】:Using separate functions based on template class type根据模板类类型使用单独的函数
【发布时间】:2015-11-30 17:12:16
【问题描述】:

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

我有这样的课程设置:

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

当我调用类来测试它时,我使用:

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

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

【问题讨论】:

    标签: c++ hash hashtable


    【解决方案1】:

    我看到至少三种方法:

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

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

    hashTable 中只需致电hash()

    第二。创建一个单独的模板类(或者,一个函数)hash&lt;T&gt; 并将其专门用于intfloat 等。然后在hastTable 中将其称为hash&lt;K&gt;

     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...
    

    【讨论】:

    • 我不知道我是怎么忘记重载函数的,它工作得很好。非常感谢。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2019-04-23
      • 1970-01-01
      • 2021-12-26
      • 2013-04-11
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多