问题标签 [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 投票
1 回答
513 浏览

c++ - 为什么此代码为 std::hash 模板的 **ALL** 枚举提供专业化?

我不是 C++ 专家,但不知何故,我在将我的 MSVS 2015 C++ 代码移植到 MinGW 4.9.2 以专门std::hash支持所有enums 类时提供了一个解决方案。这里有任何 C++ 编译器开发人员或 C++ 专业程序员,您能解释一下为什么这种专业化有效,尽管根据他们所说的 C++ 标准它是未定义的行为吗?

Gist 上带有示例的完整代码链接

提供对的支持std::hash<enum T>意味着所有类都std::unordered_XXX将支持任何enum作为键。

具有此定义的GCC 6.1.0std::hash失败并出现错误

没有此定义的GCC 5.3.0std::hash对于 std::unordered_set 失败,并出现以下错误:

0 投票
2 回答
2620 浏览

c++ - 使用 std::tuple_element 时无效使用不完整类型的问题

下面的代码为 a 实现了一个哈希函数,然后在我的代码库的std::tuple不同段中使用它。std::unordered_mapstd::tuple

然后,作为一个例子,我会像这样使用这个哈希函数对象,

但是,在GCC 6.1.0MSVC2015中,我收到以下错误(对于上面的每个违规行都相同):

错误:无效使用不完整类型“ class std::tuple_element<2ul, const std::tuple<int,int,int>&>

我不完全确定是什么导致了这个错误(尽管它可能是由于std::tuple通过模板参数传递的“抽象” Tuple)或者如何解决它,所以任何帮助表示赞赏。

0 投票
1 回答
1413 浏览

c++ - 如何散列 QVariant?

我需要QList<QVariant>用作std::unordered_map. 这样做的目的是通过在唯一键列上建立索引来优化对数据表的搜索。

所以我做了这个代码。它不完整,但列出了表键列中出现的一些基本数据类型:

显然,我不喜欢整件事switch。这是相当长而丑陋的代码,只考虑基本类型。我宁愿对分配给QVariant' 的内部数据的内存数据进行哈希处理。或者,甚至更好 - 使用一些 Qt 的散列方法。

是否有一种半可靠的*方法来散列任何 QVariant 而无需将其转换为原始类型?

*我知道复杂的对象可能隐藏在 QVariant 后面,但是这会导致碰撞的情况很少见,所以我不必在意。

0 投票
3 回答
5371 浏览

c++ - 使用 QString 作为 std::unordered_map 中的键

我正在尝试QString用作 a 中的密钥std::unordered_map,但是出现错误:

错误 C2280:'std::hash<_Kty>::hash(const std::hash<_Kty> &)':试图引用已删除的函数

我无法切换到, QHash因为地图的值类型是不可复制的。有什么办法可以使这项工作?

0 投票
1 回答
1058 浏览

c++ - 生成固定大小的哈希

我在 cpp 实用程序中使用 std::hash 来生成字符串的哈希值。我的要求是生成固定大小的 11 位哈希。散列函数不必很大就不会发生冲突。我唯一的要求是生成 11 位数字的固定大小的散列。任何输入都会很棒,我也可以使用一些自定义哈希函数。

0 投票
1 回答
1269 浏览

c++ - 对于不同的编译版本和不同的机器,std::hash 是否为相同的输入提供相同的结果?

我有一些随机测试参数,我需要计算一个哈希来检测我是否使用相同的参数运行。我可能会使用在不同时间重新编译的相同源代码来运行测试,或者在不同的机器上运行。

即便如此,我想检测是否在运行中使用了相同的参数。对于不同的编译版本和不同的机器,相同的输入是否std::hash给出相同的结果?

例如

这将永远是一个唯一的数字吗?

0 投票
1 回答
255 浏览

c++ - 使用 std::hash对于自定义类

以下两个 return 语句返回相同的东西吗?

我凭直觉想写类似的东西

哪个没有编译(因为我没有初始化结构的实例?!)。还有另一种我想念的方式吗?是否担心不必要地创建命名的哈希结构?

0 投票
1 回答
175 浏览

c++ - 有条件地将 std::hash 特化为 std::shared_ptr 结构

我有一个基类。目标是强制使用从 Base 继承的所有类为 std::shared_ptr 专门化 std::hash。

我已经使用虚拟模板参数尝试了以下方法,但编译器错误显然抱怨这是对struct std::hash<std::shared_ptr<_Tp>>.

我的问题是:是否可以有条件地专门std开设这样的课程?

0 投票
0 回答
100 浏览

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类型。

我将不胜感激对这个问题的任何看法——想法是否合理以及如何实现我的目标。

0 投票
1 回答
419 浏览

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不适合。谢谢!