Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现具有两个或更多键的哈希函数? 我目前正在C++中学习数据结构和算法学期项目。我想实现一个散列函数,使用一个人的姓名(字符串)和电话号码(整数)访问他的数据。我还计划使用开放寻址处理冲突(如果此信息相关)。此外,我不允许使用任何STL库函数。_C++_Hash Function - Fatal编程技术网

如何实现具有两个或更多键的哈希函数? 我目前正在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视图
    ,并使用其散列
  • 步骤1的有效解决方案。可能会很难实现,因为C++没有标准化串行数据的方式。一个简单但非最佳的解决方案是简单地转换为文本字符串,在这种情况下,我们也不需要字符串视图

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

    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个数字。你的钥匙是一把钥匙,尽管它有两部分。