我只想在无序集中存储几个对象。 创建几个集,
auto set1 = std::unordered_set<Myclass>();
我有时会遇到这样的错误:
未定义模板的隐式实例化&#st; :: __ 1 :: hash&#39;
除了unordered_set之外,没有其他替代品可以开箱即用吗?为什么&#34;哈希&#34;需要的?
答案 0 :(得分:4)
std::unordered_set
通过散列您使用的密钥来索引其存储中的值,就像哈希表或C ++ std::unordered_map
实现一样。
如果您不想为Myclass
编写哈希函数,请改用std::set
。这可能比定义哈希函数并使用std::unordered_set
更糟糕,但如果您的类很难编写哈希函数,则可能是值得的。取决于课程和你的申请。
如果您想使用std::unordered_set
,则需要为Myclass
提供哈希函数。为您的班级提供std::hash
的专业化,或为std::unordered_set
提供哈希政策。
//specialize std::hash
namespace std
{
template<>
struct hash<Myclass>
{
typedef Myclass argument_type;
typedef std::size_t result_type;
result_type operator()(argument_type const& s) const
{
//some code to hash a Myclass object
}
};
}
auto set1 = std::unordered_set<Myclass>();
//hashing policy version
class MyclassHash
{
public:
std::size_t operator()(Myclass const& s) const
{
//some code to hash a Myclass object
}
};
auto set1 = std::unordered_set<Myclass, MyclassHash>();