如何实现具有两个或更多键的哈希函数? 我目前正在C++中学习数据结构和算法学期项目。我想实现一个散列函数,使用一个人的姓名(字符串)和电话号码(整数)访问他的数据。我还计划使用开放寻址处理冲突(如果此信息相关)。此外,我不允许使用任何STL库函数。
一般做法是:如何实现具有两个或更多键的哈希函数? 我目前正在C++中学习数据结构和算法学期项目。我想实现一个散列函数,使用一个人的姓名(字符串)和电话号码(整数)访问他的数据。我还计划使用开放寻址处理冲突(如果此信息相关)。此外,我不允许使用任何STL库函数。,c++,hash-function,C++,Hash Function,一般做法是: 将数据序列化为字节流 创建结果字节缓冲区的std::string\u视图,并使用其散列 步骤1的有效解决方案。可能会很难实现,因为C++没有标准化串行数据的方式。一个简单但非最佳的解决方案是简单地转换为文本字符串,在这种情况下,我们也不需要字符串视图 在您的示例中,您可以使用: std::string data = name + std::to_string(phone); std::size_t hash = std::hash<std::string>{}(data
std::string\u视图
,并使用其散列std::string data = name + std::to_string(phone);
std::size_t hash = std::hash<std::string>{}(data);
std::string data=name+std::to_string(电话);
std::size\u t hash=std::hash{}(数据);
通过定义通用哈希函数,您可以单独流式传输单个对象的字节,而无需先将它们存储在连续的缓冲区中。boost有一个方便的函数,即使您不能直接使用它,您也可以随时压缩源代码。您应该先为一个字符串实现哈希函数。一旦你有了这些,有几种可能的解决方案可以对多个值进行散列。通用散列函数可以对任何字节数组进行散列。你不是在问“name+phone”的散列,是吗?你的意思是,如果你只有姓名或电话,但不是两者都有,你想在哈希表中查找,不是吗?如果我是对的,你可以从上面的评论中看到,你需要澄清你的问题。你的两把钥匙实际上是一把钥匙。就像电话号码是一键,即使里面有10个数字。你的钥匙是一把钥匙,尽管它有两部分。