Я пытаюсь использовать MurmurHash (возвращая 64-битные хэши на 64-битном комопьютере) и отправил ему простую трехбуквенную строку 'yes' следующим образом
char* charptr = "yes";
cout << MurmurHash64A(charptr, 3, 10);
(где 3 - длина, а 10 - семя)
Это дает 64-битный хэшированный ответ, как и ожидалось, я могу установить больше указателей на строки C, держащие yes, и все они возвращают одно и то же хэшированное значение.
Но если я попытаюсь отправить ей строку C ++:
string mystring = "yes";
string* strptr = &mystring;
cout << MurmurHash64A(strptr, 3, 10);
... Я получаю другой результат для метода строки C, более того, если я настрою несколько таких строк одинаково, все они дают разные результаты.
Это наводит меня на мысль, что строки, возможно, не хранятся в смежных местах памяти, некоторые из Google это подтвердили.
Поэтому я попытался установить вектор в динамической памяти, так как это был единственный способ заставить непрерывную память.
Точно так же, как строковый метод C ++, он возвращал другой результат от строкового метода C, и когда я настроил несколько, все они возвращают разные результаты друг от друга. Я настроил их следующим образом:
char yes[3] = {'y', 'e', 's'};
vector<char> *charvec = new vector<char>;
void* myvecptr3 = &charvec;
charvec->reserve(3);
charvec->push_back(yes[0]);
charvec->push_back(yes[1]);
charvec->push_back(yes[2]);
Насколько я понимаю, мой вектор символов будет начинаться с адреса, заданного вектором, и заполнять последовательные байты моими тремя символами точно так же, как строка C.
Я смущен, почему я получаю разные результаты, любая помощь оценена?
Спасибо
C