C++ C+中的无序集+;,为什么需要散列?
我只想在一个无序的集合中存储几个对象。 制作几套,C++ C+中的无序集+;,为什么需要散列?,c++,hash,set,C++,Hash,Set,我只想在一个无序的集合中存储几个对象。 制作几套, auto set1 = std::unordered_set<Myclass>(); auto set1=std::无序_set(); 我有时会犯这样的错误,很多次: 未定义模板“std::_1::hash”的隐式实例化 除了无序的_集之外,是否没有其他可以开箱即用的替代方案?为什么需要“哈希”?< /P> < P> STD::unOrdEdEdStuts通过使用哈希表或C++< C++ > STD::unOrdEdjMult
auto set1 = std::unordered_set<Myclass>();
auto set1=std::无序_set();
我有时会犯这样的错误,很多次:
未定义模板“std::_1::hash”的隐式实例化
除了无序的_集之外,是否没有其他可以开箱即用的替代方案?为什么需要“哈希”?< /P> < P> <代码> STD::unOrdEdEdStuts通过使用哈希表或C++< C++ > STD::unOrdEdjMult/<代码>实现。 如果不想为
Myclass
编写哈希函数,只需使用std::set
。这可能比定义哈希函数并使用std::unordered_set
时执行得更差,但如果编写哈希函数对类来说比较困难,那么这可能是值得的。取决于类和应用程序
如果要使用std::unordered_set
,则需要为Myclass
提供哈希函数。为类提供std::hash
的专门化,或者为std::unordered\u集提供哈希策略
//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>();
//专门化std::hash
名称空间标准
{
样板
结构散列
{
typedef Myclass参数_type;
typedef std::大小\u t结果\u类型;
结果类型运算符()(参数类型常量&s)常量
{
//一些散列Myclass对象的代码
}
};
}
自动设置1=std::无序设置();
//哈希策略版本
类MyclassHash
{
公众:
std::size\u t运算符()(Myclass常量&s)常量
{
//一些散列Myclass对象的代码
}
};
自动设置1=std::无序设置();
基本上这意味着您没有提供任何散列MyClass
的方法。您可以改用std::set
,使用几乎相同的接口但不同的性能特征。然后,您需要为MyClass
提供一些排序功能。我不理解下一票。如何才能改善这个问题?