以下java代码返回字符串的哈希码。
String uri = "Some URI"
public int hashCode() {
return uri.hashCode();
}
我想将此代码翻译为c ++。 c ++中是否有任何可用的功能或一种简单的方法来翻译它。
答案 0 :(得分:57)
在C ++ 03中,boost::hash
。在C ++ 11中,std::hash
。
std::hash<std::string>()("foo");
答案 1 :(得分:15)
Boost提供了一个哈希函数:
#include <boost/functional/hash.hpp>
int hashCode()
{
boost::hash<std::string> string_hash;
return string_hash("Hash me");
}
答案 2 :(得分:6)
以下是Java中默认String.hashCode()
的源代码,这是一个在C ++中实现的繁琐练习。
public int hashCode()
{
int h = hash;
if (h == 0 && count > 0)
{
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++)
{
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
答案 3 :(得分:4)
就个人而言,我喜欢使用boost的哈希函数
http://www.boost.org/doc/libs/1_47_0/doc/html/hash.html
制作字符串哈希很简单,
boost::hash<std::string> string_hash;
std::size_t h = string_hash("Hash me");
较新版本的C ++与std :: hash
具有等价物答案 4 :(得分:1)
//对于C ++ Qt,您可以使用此代码,结果与Java hashcode()相同
int hashCode(QString text){
int hash = 0, strlen = text.length(), i;
QChar character;
if (strlen == 0)
return hash;
for (i = 0; i < strlen; i++) {
character = text.at(i);
hash = (31 * hash) + (character.toAscii());
}
return hash;
}
答案 5 :(得分:0)
我遇到了与您同样的问题,希望这段代码对您有所帮助:
int HashCode (const std::string &str) {
int h = 0;
for (size_t i = 0; i < str.size(); ++i)
h = h * 31 + static_cast<int>(str[i]);
return h;
}