如何为自定义结构中定义的无序集编写自定义哈希函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为自定义结构中定义的无序集编写自定义哈希函数?相关的知识,希望对你有一定的参考价值。
我正在尝试为自己的结构编写一个新的哈希函数。这是我的代码:
struct people{
int id;
unordered_set<people>friends;
people(int x) : id(x) {}
};
我需要为朋友们提供哈希函数,例如:
struct peopleHash{
size_t operator()(const people& p) const{
return p.id;
}
}
问题出在这里:如果我首先初始化人员,那么peopleHash函数会找到“未定义类型的人”。如果我首先初始化peopleHash,也会发生同样的事情。我试图在people结构中定义peopleHash,例如:
struct people{
int id;
struct peopleHash{
size_t operator()(const people& p) const{
return p.id;
}
};
unordered_set<people, peopleHash>friends;
people(int x) : id(x) {}
};
但编译说:
error: invalid operands to binary expression ('const people' and 'const people')
{return __x == __y;}
我不知道如何处理这个......有什么帮助吗?
答案
你不能这样做。当您实例化未定义行为的people
时,std::unordered_set
将是一个不完整的类型。见http://eel.is/c++draft/library#res.on.functions。
以上是关于如何为自定义结构中定义的无序集编写自定义哈希函数?的主要内容,如果未能解决你的问题,请参考以下文章