【问题标题】:Hashing string in cpp own versioncpp自己版本中的哈希字符串
【发布时间】:2018-12-01 20:55:00
【问题描述】:

我必须在 C++ 中实现一个字符串散列函数 如果是 int 就没有那么难了,但是如果是 string 没有外部库的情况下怎么办呢?

【问题讨论】:

  • 使用std::hash字符串特化。
  • 我必须在不使用内置方法的情况下编写自己的哈希函数
  • 每个字符都可以表示为一个 int(实际上,每个数据类型最后都是某种 int)。所以字符串只是一个整数序列(但被视为字符)。这应该足以自己找出答案。

标签: c++ algorithm hash


【解决方案1】:

我建议用于字符串的简单哈希函数是考虑每个字符的 ASCII 值。因此,请按照以下步骤获取哈希值。

  1. 计算与字符串字符对应的所有 ASCII 值的总和。
  2. hash_value = sum%N

其中 N = 哈希表的大小

【讨论】:

    【解决方案2】:

    有很多哈希算法。如果你想要一个简单的、不太高质量的,使用 djb2(来自here):

    unsigned long
    hash(unsigned char *str)
    {
        unsigned long hash = 5381;
        int c;
    
        while (c = *str++)
            hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
    
        return hash;
    }
    

    如果您想要更好的算法,请查看smhasher 了解很多算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-04
      • 2012-10-10
      • 1970-01-01
      • 2011-04-28
      • 2013-01-20
      • 2011-08-18
      • 2019-10-26
      • 2012-08-23
      相关资源
      最近更新 更多