Создать фиксированный размер хэша

Я использую std :: hash в утилите cpp для генерации хеша для строки. Мое требование — создать хэш фиксированного размера из 11 цифр. Хеш-функция не обязательно должна быть великолепной, чтобы никогда не иметь конфликтов.
Единственное требование, которое у меня есть, — генерировать хэш фиксированного размера из 11 цифр. Любые входные данные будут хорошими, я также могу использовать некоторые пользовательские хэш-функции.

#include <iostream>
#include <string>
#include <functional>
#include <iomanip>
#include <unordered_set>
int main()
{
std::hash<std::string> hash_fn;

std::string s1 = "Stand back! I've got jimmies!";
size_t hash1 = hash_fn(s1);
std::cout << hash1 << '\n'; // OUTPUT: 3544599705012401047

s1 = "h";
hash1 = hash_fn(s1);
std::cout << hash1 << '\n'; // OUTPUT: 11539147918811572172

return 1;
}

1

Решение

Это очень просто, вы можете просто по модулю результат:

size_t fix_11digits(size_t n) { return n % 100000000000LU; }

Использование:

size_t hash1 = fix_11digits(hash_fn(s1));

РЕДАКТИРОВАТЬ:

Если вы хотите получить фактическую строку хеша, то помните о ведущих нулях:

std::ostringstream ss;
ss << std::setw(11) << std::setfill('0') << hash1;
std::string s{ss.str()};
1

Другие решения

Других решений пока нет …