如何在c ++中获取字符串的哈希码

时间:2011-11-11 13:42:25

标签: c++ string hash hashcode

以下java代码返回字符串的哈希码。

String uri = "Some URI"
public int hashCode() {
    return uri.hashCode();
}

我想将此代码翻译为c ++。 c ++中是否有任何可用的功能或一种简单的方法来翻译它。

6 个答案:

答案 0 :(得分:57)

在C ++ 03中,boost::hash。在C ++ 11中,std::hash

std::hash<std::string>()("foo");

答案 1 :(得分:15)

Boost提供了一个哈希函数:

boost hash

#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;
}