如何在C++中将单个char散列为相对较小的素数?

Asp*_*Mat -4 c++ hash hashtable

我感兴趣的是将字母哈希值散列到相对较小的不同素数.例如, a->2,b->3, c->5, d->7, ....因为我将乘以/除以几个字符的哈希值.

std::hash然而,我尝试将字符散列为非常大的整数,如果我乘以/除,它会导致溢出,是否有更简单的方法可以做到这一点?

我可能的一种方法是使用Eratosthenes筛子生成第一批素数,然后使用a std::unordered_map来存储char,int对.但是,标准库中是否有任何现成的散列函数可以满足我的需求?

Tim*_*mD1 6

我只会将前26个素数存储在std::vector被调用的中primes,然后如果你有字符c,只需使用正确的素数primes[c-'a'].

  • @AspiringMat:不,因为那不是哈希函数的功能.我不知道C++标准库中有什么东西可以处理质数,除了RNG之外. (2认同)
  • @AspiringMat你似乎有点滥用工作'哈希'.根据定义,散列函数是一个函数,它接受任意长度的输入并产生一个固定长度的输出.您的函数接收固定长度的输入,因此它不是哈希值. (2认同)