我想要一个具有以下结构的类:
class A {
public:
struct key_type {};
private:
std::unordered_map<key_type, some_other_type> m;
}
据我了解,为了完成这项工作,我需要在宣布std::hash
之前专注std::equal_to
和A::m
,但在声明A::key_type
之后,这使得无法实现,因为我无法在 A
中专门化模板。 Afaik,也无法转发声明(在A
的定义之外)A::key_type
。
基本上我的问题是:我错过了什么,或者这种结构是不可能的?
答案 0 :(得分:1)
有几种方法可以解决这种情况。
定义单独的类型。
struct A_key_type {};
namespace std {
template <> struct hash<A_key_type> { size_t operator()(const A_key_type&); };
}
class A {
typedef A_key_type key_type;
std::unordered_map<key_type, int> m;
};
提供明确的自定义哈希类型。
class A {
struct key_type {};
struct key_type_hasher { size_t operator()(const key_type&); };
std::unordered_map<key_type, int, key_type_hasher> m;
};