我使用对象作为unordered_map
中的键,所以我需要定义一个哈希函数。我的问题是,其中应该实现哈希函数。我应该把它与类实现一起使用,还是应该在我需要它的地方实现它。
更新: 如果它有所不同,所有这些都基于框架
答案 0 :(得分:3)
如果您预计需要在许多unordered_map
中重复使用它,请将其放在可见的位置,就像在课堂上一样。
如果您只需要一次性unordered_map
,请将其放在您使用它的位置附近。你甚至可以use a lambda。
答案 1 :(得分:1)
我将它与类定义一起使用,至少如果您使用==
那样
unordered_map
中的等式函数。执行
哈希函数取决于相等比较的实现,
将两者结合在一起,减少就有一定的优势
有人不改变哈希函数的概率
改变==
。
如果你还要为地图定义一个特殊的相等函数,那么 这两个函数应该一起定义,可能接近于哪里 它们将用于实例化地图。
答案 2 :(得分:0)
在我看来,如果哈希函数是基本的,如下所示它应该是类的方法,也应该是内联的。
int hashFunction(long x){
return (int) (x % N);
}
如果它是一个更复杂的哈希函数,它应该是这个类的一个方法。因为你需要一个“N”,这将是该类的特定。