使用哈希函数时遇到问题 我在C++代码中实现谷歌的密集散列映射。我想使用hash2()作为散列函数。但问题是。我尝试了很多,但似乎无法让哈希函数工作。该示例显示了默认哈希函数(hash)的使用

使用哈希函数时遇到问题 我在C++代码中实现谷歌的密集散列映射。我想使用hash2()作为散列函数。但问题是。我尝试了很多,但似乎无法让哈希函数工作。该示例显示了默认哈希函数(hash)的使用,hash,hashmap,Hash,Hashmap,显然,densite\u hash\u map从其散列函数中需要的签名与durrushash2提供的签名不匹配。您必须在自己的函数或函子中执行自己的“阻抗匹配”,该函数或函子实现所需的签名并在内部使用提供的签名。然而,这需要能够确定与给定的常量char*对应的len,对此没有明显的答案。您是否打算像老式的C“伪字符串”一样,只在哈希映射中存储“以null结尾的字符数组”,这样strlen就足够了?或者,还有什么 也许使用 STD::String (或者其他一些明确的C++类型,这取决于你到底想要

显然,
densite\u hash\u map
从其散列函数中需要的签名与
durrushash2
提供的签名不匹配。您必须在自己的函数或函子中执行自己的“阻抗匹配”,该函数或函子实现所需的签名并在内部使用提供的签名。然而,这需要能够确定与给定的
常量char*
对应的
len
,对此没有明显的答案。您是否打算像老式的C“伪字符串”一样,只在哈希映射中存储“以null结尾的字符数组”,这样
strlen
就足够了?或者,还有什么


也许使用<代码> STD::String (或者其他一些明确的C++类型,这取决于你到底想要达到什么样的!)而不是那些可疑的<代码> const char */Cult> s将是一个更好的开始!p> 嘿,谢谢你的回复。是的,斯特伦就足够了。我也可以尝试使用std::string。但是假设我们知道“len”,你能告诉我如何进行“阻抗匹配”吗。我的意思是,我只想能够使用散列函数。我无法创建使用Hash2作为哈希函数的哈希映射。谢谢您需要编写自己的函数(只需要一个参数)并在内部使用其三个参数调用MurruldHash2,然后将该函数用作

哈希映射的“哈希函数”。您将永远无法使用三个参数的函数,因为“哈希函数”本身:
hash\u map
需要一个带有一个参数的哈希函数,因此您必须编写自己的函数,并根据该约束使用它。为什么这是个问题?!
dense_hash_map < const char * , int, hash < const char*>, eqstr> months;
unsigned int MurmurHash2 ( const char * key, int len, unsigned int seed)