问题标签 [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++ - 为什么此代码为 std::hash 模板的 **ALL** 枚举提供专业化?
我不是 C++ 专家,但不知何故,我在将我的 MSVS 2015 C++ 代码移植到 MinGW 4.9.2 以专门std::hash
支持所有enum
s 类时提供了一个解决方案。这里有任何 C++ 编译器开发人员或 C++ 专业程序员,您能解释一下为什么这种专业化有效,尽管根据他们所说的 C++ 标准它是未定义的行为吗?
提供对的支持std::hash<enum T>
意味着所有类都std::unordered_XXX
将支持任何enum
作为键。
具有此定义的GCC 6.1.0std::hash
失败并出现错误
没有此定义的GCC 5.3.0std::hash
对于 std::unordered_set 失败,并出现以下错误:
c++ - 使用 std::tuple_element 时无效使用不完整类型的问题
下面的代码为 a 实现了一个哈希函数,然后在我的代码库的std::tuple
不同段中使用它。std::unordered_map
std::tuple
然后,作为一个例子,我会像这样使用这个哈希函数对象,
但是,在GCC 6.1.0
和MSVC2015
中,我收到以下错误(对于上面的每个违规行都相同):
错误:无效使用不完整类型“
class std::tuple_element<2ul, const std::tuple<int,int,int>&>
”
我不完全确定是什么导致了这个错误(尽管它可能是由于std::tuple
通过模板参数传递的“抽象” Tuple
)或者如何解决它,所以任何帮助表示赞赏。
c++ - 如何散列 QVariant?
我需要QList<QVariant>
用作std::unordered_map
. 这样做的目的是通过在唯一键列上建立索引来优化对数据表的搜索。
所以我做了这个代码。它不完整,但列出了表键列中出现的一些基本数据类型:
显然,我不喜欢整件事switch
。这是相当长而丑陋的代码,只考虑基本类型。我宁愿对分配给QVariant
' 的内部数据的内存数据进行哈希处理。或者,甚至更好 - 使用一些 Qt 的散列方法。
是否有一种半可靠的*方法来散列任何 QVariant 而无需将其转换为原始类型?
*我知道复杂的对象可能隐藏在 QVariant 后面,但是这会导致碰撞的情况很少见,所以我不必在意。
c++ - 使用 QString 作为 std::unordered_map 中的键
我正在尝试QString
用作 a 中的密钥std::unordered_map
,但是出现错误:
错误 C2280:'std::hash<_Kty>::hash(const std::hash<_Kty> &)':试图引用已删除的函数
我无法切换到, QHash
因为地图的值类型是不可复制的。有什么办法可以使这项工作?
c++ - 生成固定大小的哈希
我在 cpp 实用程序中使用 std::hash 来生成字符串的哈希值。我的要求是生成固定大小的 11 位哈希。散列函数不必很大就不会发生冲突。我唯一的要求是生成 11 位数字的固定大小的散列。任何输入都会很棒,我也可以使用一些自定义哈希函数。
c++ - 对于不同的编译版本和不同的机器,std::hash 是否为相同的输入提供相同的结果?
我有一些随机测试参数,我需要计算一个哈希来检测我是否使用相同的参数运行。我可能会使用在不同时间重新编译的相同源代码来运行测试,或者在不同的机器上运行。
即便如此,我想检测是否在运行中使用了相同的参数。对于不同的编译版本和不同的机器,相同的输入是否std::hash
给出相同的结果?
例如
这将永远是一个唯一的数字吗?
c++ - 使用 std::hash对于自定义类
以下两个 return 语句返回相同的东西吗?
我凭直觉想写类似的东西
哪个没有编译(因为我没有初始化结构的实例?!)。还有另一种我想念的方式吗?是否担心不必要地创建命名的哈希结构?
c++ - 有条件地将 std::hash 特化为 std::shared_ptr 结构
我有一个基类。目标是强制使用从 Base 继承的所有类为 std::shared_ptr 专门化 std::hash。
我已经使用虚拟模板参数尝试了以下方法,但编译器错误显然抱怨这是对struct std::hash<std::shared_ptr<_Tp>>
.
我的问题是:是否可以有条件地专门std
开设这样的课程?
c++ - 使用联合进行结构散列与 std::unordered_map 或 std::unordered_set
我有一个简单的结构:
我将这个结构的所有实例都保存在容器中,我需要尽可能快地搜索它。目前,我使用std::set
基于字典比较的自定义比较函子。但是,我想尝试将我的数据存储在std::unordered_set
.
我用于boost::hash_combine
创建自定义哈希函子,但结果实际上比使用std::set
. 我现在想将结构中的所有数据打包unsigned long long
并使用标准std::hash
函子。所以一个想法是有类似的东西:
问题是,我想确保我的结构确实适合unsigned long long
类型。我可以在限制范围内更改我的数据成员的类型:
ix
并且iy
小于 100,000(它们可能不适合 16 位整数,但 24 位已经绰绰有余,但是,没有标准的 24 位整数?)。
d
可以安全地属于一个char
类型。
我将不胜感激对这个问题的任何看法——想法是否合理以及如何实现我的目标。
c++ - C++ std::hash 返回类型
所以我一直在阅读很多关于使用std::hash
及其标准实现的文章、文档页面、帖子、基准测试等。
概要
看这里,它似乎std::hash
总是会返回一个std::size_t
,从这里开始,它的大小至少为16 位或 2 个字节,尽管它取决于实现。
但这让我很担心。std::hash
如果我什至不能保证哈希至少为 32 位(我真的希望它返回 64 位),那么我该如何在字符串上使用。
在我的特定 x64 机器std::size_t
上定义为long unsigned int
,但显然在我部署我的程序时不能保证。
问题
有没有办法解决这个问题,所以我可以肯定地知道我得到了一个 64 位的哈希返回std::hash
?
结论
从评论来看,std::hash
不适合。谢谢!