如何使用两个或更多键实现哈希函数?

问题描述

我目前正在从事 C++ 数据结构和算法学期项目。我想实现一个散列函数来使用他的姓名(字符串)和他的电话号码(整数)访问一个人的数据。我还计划处理与开放寻址的冲突(如果此信息相关)。另外,我不允许使用任何 STL 库函数

解决方法

一般方法是:

  1. 将数据序列化为字节流。
  2. 创建结果字节缓冲区的 std::string_view 并使用其哈希

第 1 步的有效解决方案可能很难实现,因为 C++ 没有序列化数据的标准方法。一个简单但非最优的解决方案是简单地转换为文本字符串,在这种情况下我们也不需要字符串视图。

在您的示例中,您可以使用:

std::string data = name + std::to_string(phone);
std::size_t hash = std::hash<std::string>{}(data);

通过定义通用散列函数,您可以单独流式传输各个对象的字节,而无需先将它们存储在连续缓冲区中。