如何在C++中将单个字符哈希为相对较小的素数?



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

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

我的一种可能方法是使用埃拉托色尼筛子生成第一束素数,然后使用std::unordered_map来存储char,int对。但是,标准库中是否有任何现成的哈希函数可以满足我的需求?

我只会将前 26 个素数存储在一个名为primesstd::vector中,然后如果你有字符c,只需使用primes[c-'a']访问正确的素数。

最新更新