2012-10-23 60 views
0

我在unordered_map中使用一个对象作为键,所以我需要定义一个哈希函数。我的问题是,其中应该实施散列函数。我应该把它放在类实现中,还是应该在需要的地方实现它?何处实现散列函数?

UPDATE: 如果它的确与众不同,这一切是基于一个框架

+0

你能告诉我们你到目前为止实施了什么吗? –

+0

为什么你需要知道我在问什么? – NebulaFox

回答

3

如果你预计你需要重复使用它在许多unordered_map S,把它放在显眼的地方,就像在课堂上。

如果你只是需要它一次性unordered_map,把它放在你使用它的地方。你甚至可以use a lambda

+0

这是一种情况,我会*不*使用'lambda'。你可以确定,如果有人正在修改相等的定义,他们就不会发现追踪用于实例化'unordered_map'的lambdas。鉴于相等函数和散列函数之间的依赖关系,它们应该彼此靠近定义。 –

+0

@JamesKanze Err ...“接近”彼此的连续两行代码(如我的链接所示)? –

+0

如果您也使用特殊的相等函数,那是一个很好的解决方案。我想在很多情况下,相等函数将是对象类型的'oparator =='。 –

1

我把它与类的定义,至少如果您使用==作为 unordered_map中的相等函数。 散列函数的实现取决于等同比较的实现, ,并且在保持这两者合在一起时有一定的优势,以便在某人不改变散列函数的情况下减少 改变==的可能性。

如果你也定义地图特殊平等的功能,然后 两个函数应该被定义在一起,大概接近的地方 它们将被用于实例化地图。

0

在我看来,如果散列函数是基本的如下,它应该是类的方法,也应该内联。

int hashFunction(long x){ 
    return (int) (x % N); 
} 

如果它是一个稍微复杂一些的散列函数应该是这样class.Because您将需要一个“N”,这将是spesific到类的方法。

+0

根据标准,散列函数的返回类型应该是'size_t',而不是'int'。而且我不知道你通常需要一个取决于班级的“N”。 –