如何在c ++中定义以下哈希映射和哈希集?

时间:2014-02-23 14:20:48

标签: c++ stl

我正在尝试定义以下内容:

  #include <tr1/unordered_set>
  #include <tr1/unordered_map>

  template <class T> class cnf
  {
        public:
        T x;
        bool operator==(const cnf& c) { c.x == x; }
        size_t hash(const cnf& c) { return x.hash(); }
  }

  template <class T> class cnf_table {
    private:
       typedef unordered_set<cnf<T> > cnf_set;

       typedef unordered_map<T, cnf<T> > cnf_map;

           cnf_map my_map;
  }

我有以下问题:

  1. 我不确定当我用unordered_set和unordered_map这样定义时,实际会使用==和hash吗?

  2. 一个更严重的问题,我认为这不会编译,因为你不能为不完整的类型T调用x.hash() - 是否有不同的方法来定义哈希?

  3. 当我尝试编译类似的东西时,我得到 ton 的链错误,引用STL包含文件,最后还有一些内容:

    file.h:67:从这里实例化 /usr/include/c++/4.2.1/tr1/hashtable_policy.h:784:错误:使用无效字段'std :: tr1 :: __ detail :: _ Hash_code_base&lt; _Key,_ Value,_ExtractKey,_Equal,_H1, H2 ,std :: tr1 :: _detail :: _ Default_ranged_hash,false&gt; :: _ M_h1'

  4. 编辑:大约2,我不确定的是如何在模板环境中使用类型T的哈希值。我认为对于类型T,你不能直接调用方法,所以我不是确定如何计算其哈希码。

0 个答案:

没有答案