我正在尝试实现哈希集,但是我对哈希函数有些麻烦。我想在集合中添加姓名和电话号码的人:
class Person{
string name;
long long int phoneNumber;
}
我在集合中的索引是通过对phoneNumber的数字求和来计算的。问题是我不希望我的功能是这样的:
int add(long long int nr, Element e) - the function that adds an Element to the set
{
int hashCode = hash(nr);;
...
}
其中long long int nr
应为phoneNumber,Element e
应为Person。我的意思是,这很愚蠢。如果我已将此人作为参数,为什么还要将它作为phoneNumber?正如您所看到的,我正在使用模板,而我的老师建议我为hashFunction执行一个虚拟类,以强制它成为相应的类型(类似于Java中的HashSet)。问题是我没有想法如何做到这一点。你有什么想法可以帮助我吗?
答案 0 :(得分:0)
如果你这样做:
int add(Person p, Element e)
您将限制hastset类完全依赖Person
类。以这种方式将整数或字符串值带入哈希方法更合理。您可以确定要在哈希方法之外进行哈希处理的参数,并将其作为输入提供。
此外,当您将另一个成员添加到Person类(如age)并在散列中使用时,您还需要修改散列方法以使用此特定成员。