用于散列的散列设置函数

时间:2013-05-18 15:14:47

标签: c++ hash set

我正在尝试实现哈希集,但是我对哈希函数有些麻烦。我想在集合中添加姓名和电话号码的人:

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)。问题是我没有想法如何做到这一点。你有什么想法可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

如果你这样做:

 int add(Person p, Element e)

您将限制hastset类完全依赖Person类。以这种方式将整数或字符串值带入哈希方法更合理。您可以确定要在哈希方法之外进行哈希处理的参数,并将其作为输入提供。

此外,当您将另一个成员添加到Person类(如age)并在散列中使用时,您还需要修改散列方法以使用此特定成员。