Le code Java suivant renvoie le code de hachage d'une chaîne.
String uri = "Some URI"
public int hashCode() {
return uri.hashCode();
}
Je veux traduire ce code en c ++. Existe-t-il une fonction disponible dans c ++ ou un moyen facile de traduire cela?
Boost fournit une fonction de hachage:
#include <boost/functional/hash.hpp>
int hashCode()
{
boost::hash<std::string> string_hash;
return string_hash("Hash me");
}
En C++ 03, boost::hash
. En C++ 11, std::hash
.
std::hash<std::string>()("foo");
Ce qui suit est la source de la String.hashCode()
par défaut en Java. Il s’agit d’un exercice trival à implémenter en 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;
}
Personnellement, j'aime utiliser les fonctions de hachage de boost
http://www.boost.org/doc/libs/1_47_0/doc/html/hash.html
faire un hachage de chaîne est assez simple,
boost::hash<std::string> string_hash;
std::size_t h = string_hash("Hash me");
les nouvelles versions de C++ ont un équivalent avec std :: hash
// Pour C++ Qt, vous pouvez utiliser ce code, le résultat est le même que pour 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;
}