在哪里实现哈希函数?

时间:2012-10-23 19:15:58

标签: c++ c++11

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

更新: 如果它有所不同,所有这些都基于框架

3 个答案:

答案 0 :(得分:3)

如果您预计需要在许多unordered_map中重复使用它,请将其放在可见的位置,就像在课堂上一样。

如果您只需要一次性unordered_map,请将其放在您使用它的位置附近。你甚至可以use a lambda

答案 1 :(得分:1)

我将它与类定义一起使用,至少如果您使用==那样 unordered_map中的等式函数。执行 哈希函数取决于相等比较的实现, 将两者结合在一起,减少就有一定的优势 有人不改变哈希函数的概率 改变==

如果你还要为地图定义一个特殊的相等函数,那么 这两个函数应该一起定义,可能接近于哪里 它们将用于实例化地图。

答案 2 :(得分:0)

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

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

如果它是一个更复杂的哈希函数,它应该是这个类的一个方法。因为你需要一个“N”,这将是该类的特定。