问题标签 [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.
c++ - g++ 链接器错误:获取 std::hash 的未定义引用错误
我在我的代码中使用 TR1 实现的 unordered_map 并且链接器给出了我什至无法破译的奇怪错误:
这是错误,我什至无法检测到它的方向?从声明中:
对`std::hash::operator()(DottedRule) const'的未定义引用
我想这与哈希的使用有关。现在,整个代码太大了(如果您仍然想看,我可能会稍后发布),但相关部分是:
我包含的最后一行是唯一使用哈希的地方。知道会发生什么吗?
非常感谢, Onur
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的运算符<的讨论
c++ - 与 std::hash 的意外冲突
我知道将无限数量的字符串散列到 32b int 必须产生冲突,但我希望散列函数有一些很好的分布。
这两个字符串具有相同的哈希值是不是很奇怪?
我知道我可以使用boost::hash<std::string>
or 其他人,但我想知道std::hash
. 我用错了吗?我不应该以某种方式“播种”它吗?
c++ - 为模板类中的嵌套类专门化 std::hash
我有一个Baz
包含嵌套类的模板类Sub
。我想通过专门化 std::hash 为这个子类定义一个哈希函数。但是,它似乎不起作用。
Gcc 4.5.3 抱怨:
更新
我真正想做的是实现一个容器,它支持对其中元素的稳定引用(不是 C++ 意义上的)。我希望允许用户将这些引用插入到std::unordered_set
类似内容中,并使用它们来有效地访问或修改现有元素。以下只是一个模型,而不是我正在实现的确切容器。问题在于为引用类型定义哈希函数。
c++ - std::hash 是否保证在 stdlib 发行版中相同
如果我std::hash
使用libstdc++
然后在即将推出的C++11
VS 2012 库中使用,它们会匹配吗?
我假设哈希实现不是 C++ 规范的一部分,并且可能因分布而异?
c++ - std::hash 和/或 boost::hash 的目的是什么?
为什么要提供散列函数而不指定任何参考实现,也没有指定参考算法(md5、sha256 等)?
数据结构也有类似的特性,例如符合 C++ 标准的std::unordered_map/set/multimap/multiset::hash_function
.
所以我不明白的是:
- 为什么提供这种未记录的方法
- 从程序员的角度来看,实现细节是正确使用散列函数的基础,这些函数的目的是什么
- 这个函数可以链接到特定的算法吗?
c++ - 如何为来自其他库的类型专门化 std::hash
所以我使用的库有一个枚举(比如说它的名字LibEnum
)。我需要一个std::unordered_set
of LibEnum
,但我得到编译错误,没有专门std::hash
针对它的。我可以轻松编写它并返回值的数量(第一个元素是 0,第二个元素是 1 等),但是我应该把这个专业化放在哪里,它应该是什么样子?我无法修改库源。
c++ - 使用 boost::hash_value 在 C++11 中定义 std::hash
是否有一种简单的方法可以使用 C++11 和 Boost 执行以下操作:
std::hash
使用任何可用的标准定义<functional>
- 用于在那些缺少但在 中可用的情况下
boost::hash_value
定义。std::hash
std::hash
boost::hash_value
<boost/functional/hash.hpp>
例如:
std::hash<std::vector<bool>>
应该来自标准库,std::hash<std::vector<unsigned>>
应该用boost::hash_value
.
c++ - 我的 std::hash for std::tuples ...有什么改进吗?
有些人可能已经注意到 std::hash 不支持元组。所以我添加了一个看起来比我到目前为止看到的解决方案“更好”的重载。任何人有想法进一步减少此代码?请注意,这是一个编译器杀手!唯一可以编译它的是“Clang 3.2”......英特尔编译器 13.1 没有得到专门化,并一直告诉“C++ 标准不支持哈希 blabla”。而且我们不需要谈论原始的 Microsoft 编译器。
顺便说一句,我的解决方案支持递归元组,std::tuple<std::tuple<int,int>,int>
所以我不确定这是否也适用于我今天看到的现有解决方案。