【发布时间】:2017-01-02 16:09:56
【问题描述】:
我的代码是这样的:
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;
};
但是编译器不允许我这样做,因为没有为 Node 类定义哈希函数。我希望它使用基类中的哈希函数,所以我这样做了:
namespace std
{
template<>
struct hash<Node>
{
size_t operator()(const Node& k) const
{
return k.hash();
}
};
}
但它仍然不起作用。如果我把它放在节点声明之前,k.hash() 是未定义的(我不能转发声明节点:公共位集,因为这是不可能的)。如果我把它放在类声明之后,我会得到错误,即类 Node 没有哈希函数。
我该如何解决这个问题?
【问题讨论】:
-
是什么阻止您在
class Node {}之前声明hash<Node> {}并在之后定义size_t hash<Node>::operator()? -
Node及其基类std::bitset都没有名为hash的方法。你的意思可能是return std::hash<bitset<BITS_COUNT>>()(k); -
@IgorTandetnik 我正在使用 Visual Studio 2015 并且 bitset 有一个名为 hash() 的函数
-
在这种情况下,请注意这个函数是非标准的,甚至不是documented in Microsoft's documentation for
bitset。依赖它的持续存在可能是不明智的。
标签: c++ class hash unordered-set