C++ 是否可以将指针指向无序集<;MyClass>;作为我课堂的一部分?

C++ 是否可以将指针指向无序集<;MyClass>;作为我课堂的一部分?,c++,class,hash,unordered-set,C++,Class,Hash,Unordered Set,我的代码如下所示: class Node : public bitset<BITS_COUNT> { public: Node(string s) : bitset<BITS_COUNT>(s) {} void setGroup(unordered_set<Node>* newSet) { currentGroup = newSet; } unordered_set<Node>* getCurrentSet() { retu

我的代码如下所示:

class Node : public bitset<BITS_COUNT> {
public:
    Node(string s) : bitset<BITS_COUNT>(s) {}
    void setGroup(unordered_set<Node>* newSet) { currentGroup = newSet; }
    unordered_set<Node>* getCurrentSet() { return currentGroup; }
private:
    unordered_set<Node>* currentGroup = nullptr;
};
类节点:公共位集{
公众:
节点(字符串s):位集{}
无效集合组(无序集合*新闻集){currentGroup=newSet;}
无序_集*getCurrentSet(){return currentGroup;}
私人:
无序_集*currentGroup=nullptr;
};
但编译器不允许我这样做,因为并没有为类节点定义哈希函数。我希望它使用基类中的哈希函数,所以我做了如下操作:

namespace std
{
    template<>
    struct hash<Node>
    {
        size_t operator()(const Node& k) const
        {
            return k.hash();
        }
    };
}
名称空间std
{
模板
结构散列
{
size\u t运算符()(常量节点和k)常量
{
返回k.hash();
}
};
}
但它仍然不起作用。如果我把它放在Node delcaration之前,k.hash()是未定义的(并且我不能向前声明Node:public位集,因为这是不可能的)。若我把这个放在类声明之后,我会得到一个错误,那个就是类节点并没有哈希函数


我怎样才能解决这个问题呢?

谢谢弗兰克,你的评论实际上是我的解决方案。如果有人需要该代码,则如下所示:

namespace std
{
    template<>
    struct hash<Node>
    {
        size_t operator()(const Node& k) const;
    };
}

class Node : public std::bitset<BITS_COUNT> {
public:
    Node(std::string s) : bitset<BITS_COUNT>(s) {}
    void setGroup(std::unordered_set<Node>* newSet) { currentGroup = newSet; }
    std::unordered_set<Node>* getCurrentSet() { return currentGroup; }
private:
    std::unordered_set<Node>* currentGroup = nullptr;
};

namespace std
{
    size_t hash<Node>::operator()(const Node& k) const
    {
        return k.hash();
    }
}
名称空间std
{
模板
结构散列
{
size_t操作符()(const Node&k)const;
};
}
类节点:公共标准::位集{
公众:
节点(std::string s):位集{}
void setGroup(std::无序_set*newSet){currentGroup=newSet;}
std::无序_集*getCurrentSet(){return currentGroup;}
私人:
std::无序_集*currentGroup=nullptr;
};
名称空间标准
{
大小\u t哈希::运算符()(常量节点和k)常量
{
返回k.hash();
}
}

是什么阻止您在
类节点{}
之前声明
哈希{}
并在之后定义
大小\u t hash::operator()
?无论是
节点
,还是它的基类
std::bitset
,都没有名为
哈希
的方法。您的意思可能是
返回std::hash()(k)
@IgorTandetnik我使用的是visual studio 2015,bitset有一个名为hash()的函数。在这种情况下,请注意此函数是非标准的,甚至不是。依赖它的持续存在可能是不明智的。您可能希望将
size\u t hash::operator()
内联,否则,在两个单独的翻译单元中尝试使用它时,就会出现链接错误。必须有比将其塞进命名空间
std
更好的方法。感觉不对。