【发布时间】:2014-08-08 13:48:34
【问题描述】:
我有一个模板类 Foo 可以进行身份比较(通过 ==),但有一个函数 Foo::sameStructureAs(Foo const & other) 用于更多的“值”与“指针”的平等概念。
我想创建一个unordered_map,它会覆盖散列函数和相等谓词。它们默认为std::equal_to<Key> 和std::hash<Key>...我根据身份为我的类型提供。但我需要他们根据我的sameStructureAs 进行比较。
由于 Foo 是一个模板,我做这样的事情:
template <class> struct same_structure_as;
template <class> struct hash_structure;
template <class T>
struct hash_structure<Foo<T>>
{
size_t operator() (Foo<T> const & value) const
{
// whatever...
}
};
template <class T>
struct same_structure_as<Foo<T>>
{
bool operator() (Foo<T> const & left, Foo<T> const & right) const
{
// whatever...
}
};
为此,我似乎大致遵循std:: 中的类的策略,并创建了一些通用的东西。那看起来对吗?
其次:这个或者std::中已经存在的原型的命名有没有先例?我想过像isomorphic 或congruent 这样的词。当您对“平等”的含义有不止一个想法时,这似乎是在设计课程时经常出现的东西。
【问题讨论】:
标签: c++ hash std naming unordered-map