【发布时间】:2013-05-18 15:14:47
【问题描述】:
我正在尝试实现散列集,但散列函数遇到了一些问题。我想在集合中添加有姓名和电话号码的人:
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)。问题是我不知道该怎么做。你有什么想法可以帮助我吗?
【问题讨论】:
-
电话号码不是整数,而是一串数字。
-
@sftrabbit 随便!这不是重点。
-
用电话号码作为索引有点奇怪。电话号码通常不能识别一个人。一个电话号码可以有多种写法,因此电话号码需要被规范化才能用作索引。最后,如果您想根据电话号码进行查找,最好使用(散列)map 而不是 set。