我正在尝试定义以下内容:
#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;
}
我有以下问题:
我不确定当我用unordered_set和unordered_map这样定义时,实际会使用==和hash吗?
一个更严重的问题,我认为这不会编译,因为你不能为不完整的类型T调用x.hash() - 是否有不同的方法来定义哈希?
当我尝试编译类似的东西时,我得到 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'