web-dev-qa-db-ja.com

C ++で文字列のハッシュコードを取得する方法

Java codeは文字列のハッシュコードを返します。

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

このコードをc ++に変換したいと思います。 C++で利用可能な機能またはこれを翻訳する簡単な方法はありますか?.

20
sufyan siddique

Boostはハッシュ関数を提供します:

ブーストハッシュ

#include <boost/functional/hash.hpp>

int hashCode()
{
    boost::hash<std::string> string_hash;

    return string_hash("Hash me");
}
15
tune2fs

C++ 03では、boost::hash。 C++ 11では、std::hash

std::hash<std::string>()("foo");
58
Cat Plus Plus

以下は、JavaのデフォルトのString.hashCode()のソースです。これは、C++で実装するための3つの演習です。

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;
   }
6
user177800

個人的に、私はブーストのハッシュ関数を使用したい

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
Megatron

//このコードを使用できる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; 
}
1
Javier Gonzalez

私はあなたと同じ質問に遭遇しました、このコードがあなたを助けることを願っています:

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;
}
0
Aero