【问题标题】:std::hash(c++) equivalent in Node jsNode js 中的 std::hash(c++) 等价物
【发布时间】:2021-12-21 21:58:35
【问题描述】:

我正在尝试在 Node.js 中实现 C++ 的 std::hash 功能并进行比较。由于std::hash 不基于任何加密算法,我无法理解它是如何在内部生成的。

C++ 中的使用参考:https://iq.opengenus.org/std-hash-cpp/

【问题讨论】:

  • "由于 std::hash 不基于任何加密算法" 我觉得这很难相信。它接受一个值并对其应用单向转换。它一定在做某事
  • 您是否尝试阅读 std::hash 的任何实现?更好的参考en.cppreference.com/w/cpp/utility/hash
  • 你知道std::hash的源代码只是开放读入libstdc++、libcxx和MSVC代码库吗?
  • std::hash 有多种实现:“实际的哈希函数是依赖于实现的,除了上面指定的那些之外,不需要满足任何其他质量标准。哈希函数只需要产生相同的在一个程序的单次执行中获得相同输入的结果;这允许防止冲突拒绝服务攻击的加盐哈希。"
  • @VLAZ 是的,确切地说,某事。它可能是一个身份函数,而 std::hash 不适合且与加密哈希无关。

标签: c++ node.js hash


【解决方案1】:

十秒钟的搜索产生了following fragment for libcxx(Clang 附带的 C++ STL):

// We use murmur2 when size_t is 32 bits, and cityhash64 when size_t
// is 64 bits.  This is because cityhash64 uses 64bit x 64bit
// multiplication, which can be very slow on 32-bit systems.
template <class _Size, size_t = sizeof(_Size)*__CHAR_BIT__>
struct __murmur2_or_cityhash;

template <class _Size>
struct __murmur2_or_cityhash<_Size, 32>
{
    inline _Size operator()(const void* __key, _Size __len)
         _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK;
};

libstdc++ seems to use murmur hash 也是如此,尽管哈希函数是许多简单类型(例如 char、int、double 等)的标识函数

未来读者请注意:此答案在撰写本文时是正确的。 std::hash 背后的算法将来可能会改变!

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 2015-04-12
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多