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
提供一些排序功能。我不理解下一票。如何才能改善这个问题?