问题标签 [stdhash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5818 浏览

c++ - g++ 链接器错误:获取 std::hash 的未定义引用错误

我在我的代码中使用 TR1 实现的 unordered_map 并且链接器给出了我什至无法破译的奇怪错误:

这是错误,我什至无法检测到它的方向?从声明中:

对`std::hash::operator()(DottedRule) const'的未定义引用

我想这与哈希的使用有关。现在,整个代码太大了(如果您仍然想看,我可能会稍后发布),但相关部分是:

我包含的最后一行是唯一使用哈希的地方。知道会发生什么吗?

非常感谢, Onur

0 投票
2 回答
875 浏览

c++11 - 为什么在 C++0x 中没有为 std::weak_ptr 定义 std::hash?

在阅读了关于 std::weak_ptr 的 operator< 的讨论之后,我看不出为什么定义 std::hash 以使用 std::weak_ptr 的控制块不起作用。我也不敢相信标准委员会忽略了这一点。有人阅读过有关该主题的相关讨论吗?

编辑:关于 std::weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html的运算符<的讨论

0 投票
5 回答
9765 浏览

c++ - 与 std::hash 的意外冲突

我知道将无限数量的字符串散列到 32b int 必须产生冲突,但我希望散列函数有一些很好的分布。

这两个字符串具有相同的哈希值是不是很奇怪?

我知道我可以使用boost::hash<std::string>or 其他人,但我想知道std::hash. 我用错了吗?我不应该以某种方式“播种”它吗?

0 投票
3 回答
3335 浏览

c++ - 为模板类中的嵌套类专门化 std::hash

我有一个Baz包含嵌套类的模板类Sub。我想通过专门化 std::hash 为这个子类定义一个哈希函数。但是,它似乎不起作用。

Gcc 4.5.3 抱怨:

更新

我真正想做的是实现一个容器,它支持对其中元素的稳定引用(不是 C++ 意义上的)。我希望允许用户将这些引用插入到std::unordered_set类似内容中,并使用它们来有效地访问或修改现有元素。以下只是一个模型,而不是我正在实现的确切容器。问题在于为引用类型定义哈希函数。

0 投票
3 回答
653 浏览

c++ - std::hash 是否保证在 stdlib 发行版中相同

如果我std::hash使用libstdc++然后在即将推出的C++11VS 2012 库中使用,它们会匹配吗?

我假设哈希实现不是 C++ 规范的一部分,并且可能因分布而异?

0 投票
1 回答
1346 浏览

c++ - std::hash 和/或 boost::hash 的目的是什么?

为什么要提供散列函数而不指定任何参考实现,也没有指定参考算法(md5、sha256 等)?

数据结构也有类似的特性,例如符合 C++ 标准的std::unordered_map/set/multimap/multiset::hash_function.

所以我不明白的是:

  • 为什么提供这种未记录的方法
  • 从程序员的角度来看,实现细节是正确使用散列函数的基础,这些函数的目的是什么
  • 这个函数可以链接到特定的算法吗?
0 投票
1 回答
2729 浏览

c++ - 如何为来自其他库的类型专门化 std::hash

所以我使用的库有一个枚举(比如说它的名字LibEnum)。我需要一个std::unordered_setof LibEnum,但我得到编译错误,没有专门std::hash针对它的。我可以轻松编写它并返回值的数量(第一个元素是 0,第二个元素是 1 等),但是我应该把这个专业化放在哪里,它应该是什么样子?我无法修改库源。

0 投票
2 回答
4854 浏览

c++ - 使用 boost::hash_value 在 C++11 中定义 std::hash

是否有一种简单的方法可以使用 C++11 和 Boost 执行以下操作:

  • std::hash使用任何可用的标准定义<functional>
  • 用于在那些缺少但在 中可用的情况下boost::hash_value定义。std::hashstd::hashboost::hash_value<boost/functional/hash.hpp>

例如:

  • std::hash<std::vector<bool>>应该来自标准库,
  • std::hash<std::vector<unsigned>>应该用boost::hash_value.
0 投票
4 回答
3882 浏览

c++ - std::hash 是否保证“相等”浮点数的哈希值相等?

std::hash(例如,对于doubles 或s)的浮点特化在几乎相等float方面是否可靠?也就是说,如果两个值(例如and )应该比较相等,但不会用运算符这样做,会如何表现?(1./std::sqrt(5.)/std::sqrt(5.)).2==std::hash

那么,我可以依靠 adouble作为std::unordered_map键来按预期工作吗?


我见过“散列浮点值”,但它询问了提升;我在问 C++11 的保证。

0 投票
1 回答
2588 浏览

c++ - 我的 std::hash for std::tuples ...有什么改进吗?

有些人可能已经注意到 std::hash 不支持元组。所以我添加了一个看起来比我到目前为止看到的解决方案“更好”的重载。任何人有想法进一步减少此代码?请注意,这是一个编译器杀手!唯一可以编译它的是“Clang 3.2”......英特尔编译器 13.1 没有得到专门化,并一直告诉“C++ 标准不支持哈希 blabla”。而且我们不需要谈论原始的 Microsoft 编译器。

顺便说一句,我的解决方案支持递归元组,std::tuple<std::tuple<int,int>,int>所以我不确定这是否也适用于我今天看到的现有解决方案。