【问题标题】:Generate fixed size hash生成固定大小的哈希
【发布时间】:2018-08-08 04:01:03
【问题描述】:

我正在使用 cpp 实用程序中的 std::hash 来生成字符串的哈希值。我的要求是生成固定大小的 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;
}

【问题讨论】:

  • 这里是指11个十进制位吗?

标签: c++ hash stdhash fixed-size-types


【解决方案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()};

【讨论】:

  • 请注意,在格式化输出时,您还需要考虑使用前导零填充。 n 可以包含少于 11 位数字。
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 2012-04-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多