Как получить хеш-код строки в C ++ - PullRequest
20 голосов
/ 11 ноября 2011

Следующий код Java возвращает хеш-код строки.

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

Я хочу перевести этот код на c ++.Есть ли какая-либо функция доступна в C ++ или простой способ перевести это.

Ответы [ 5 ]

57 голосов
/ 11 ноября 2011

В С ++ 03, boost::hash.В C ++ 11 std::hash.

std::hash<std::string>()("foo");
15 голосов
/ 11 ноября 2011

Повышение обеспечивает хэш-функцию:

повышение хеш-функции

#include <boost/functional/hash.hpp>

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

    return string_hash("Hash me");
}
6 голосов
/ 11 ноября 2011

Ниже приведен источник по умолчанию String.hashCode() в Java, это простое упражнение для реализации в 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;
   }
4 голосов
/ 11 ноября 2011

Лично мне нравится использовать хэш-функции 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

1 голос
/ 17 июля 2013

// Для 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; 
}
...