问题标签 [unordered-map]
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++ - 使用 unordered_sets 的 unordered_map
如果我有一个由字符串索引的 unordered_sets 的无序映射,例如
我有几个关于使用这种数据结构的问题。无论如何,我是否可以在映射中索引的集合中插入一个新值,而不必使用指向集合的指针或重新索引映射值?
第二个问题,当我尝试索引到地图时,我遇到了一个未解决的外部符号错误。举个例子,
我不确定为什么这会导致未解决的符号错误,因此那里的任何指导都会有所帮助。
提前致谢
编辑: UseMap[character] 的任何使用都会导致未解决的符号错误
还添加了错误代码和源示例
全班
以及完整的错误信息:
错误 52 错误 LNK2001:未解析的外部符号“私有:静态类 boost::unordered_map,class std::allocator >,class boost::unordered_set,class std::allocator >,struct boost::hash,class std::allocator > >,struct std::equal_to,class std::allocator > >,class std::allocator,class std::allocator > > >,struct boost::hash,class std::allocator > >,struct std::equal_to ,class std::allocator > >,class std::allocator,class std::allocator > const ,class boost::unordered_set,class std::allocator >,struct boost::hash,class std::allocator > >, struct std::equal_to,class std::allocator > >,class std::allocator,class std::allocator > > > > > SingleUse::UseMap"(?UseMap@SingleUse@@0V?$unordered_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$unordered_set@V?$basic_string@ DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$hash@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@ 2@@std@@@boost@@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator @V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@boost@@U?$hash@V?$basic_string@DU?$char_traits @D@std@@V?$allocator@D@2@@std@@@4@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2 @@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V? $unordered_set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$hash@V?$basic_string@DU?$char_traits@D@std@ @V?$allocator@D@2@@std@@@boost@@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std @@@2@@boost@@@std@@@2@@boost@@A) G:\Documents\Programming Projects\KHMP\KHMP_Repo\KHMP\build\KHMP\KHMP\KHMPMain.obj
c++ - 在 C++ std::unordered_map 中预分配桶
我正在使用std::unordered_map
from gnu++0x 来存储大量数据。我想为大量元素预先分配空间,因为我可以限制使用的总空间。
我想做的是打电话:
其中 x 是已知的。
std::unordered_map
不支持这个。如果可能的话,我宁愿使用std::unordered_map
它,因为它最终将成为标准的一部分。
其他一些限制:
需要可靠的 O(1) 访问和地图变异。所需的散列和比较函数已经是非标准的并且有些昂贵。O(log n) 突变(与 一样std::map
)太昂贵了。
-> 昂贵的哈希和比较也使得基于摊销的增长方式过于昂贵。每个额外的插入都需要对这些函数进行 O(n) 次操作,这会导致算法运行时出现额外的二次项,因为指数存储需求需要 O(n) 次增长。
c++ - 使用 C++0x 的 unordered_map
我正在使用unordered_map
包含为:
#include <unordered_map>
并且程序编译如下:
g++ Test.cc -std=gnu++0x -o test
我使用的unordered_map
是TR1还是C++0x。还是两者都一样?
c++ - unordered_map 插入错误 C++
我正在尝试使用声明为 std::set 值的 unordered_map 插入:
在数据库构造函数中,我正在从文件中读取数据并尝试插入 unordered_map
我已经尝试用这两种方法编译代码:
和
但我收到错误:
我也尝试过不同的插入方法:
和
这只会导致类似的错误
如果有人能帮助我理解它为什么不工作以及我能做些什么来完成这项工作,我将非常感激。
谢谢你。
c++ - 惨不忍睹的unordered_map插入性能/hash函数
我现在一直在编写一个图像处理算法,在某些时候我需要收集一些关于转换后的像素的统计信息,以便更深入地了解我应该遵循的进一步发展方向。我需要收集的信息格式如下:
我所做的是打开转换后的图像并对其进行迭代,将我需要的值保存到std::unordered_map
具有以下签名的值:
在一个循环中:
我还编写了一个自定义散列函数(它是一个完美的散列函数:256^2 x R + 256 x G +
B
- 所以无论存储桶和散列表的布局如何(合理扩展),冲突都应该是最小的。
我注意到的是,插入速度非常慢!- 在达到第 11 次迭代后,插入速度降低了约 100 倍。我有大量的碰撞!尽管图像中重复的颜色数量很少。
之后,我想消除代码中任何可能的错误,并开始unordered_map
使用带有原始键类型(如 int)的 STL 哈希函数进行基准测试。
基准测试的代码是:
...这是外循环前 20 次迭代的结果(仅使用 STL 的散列函数作为 int 类型的键):
在这种情况下,碰撞次数是不是太高了?STL 库通常质量很高,但对于简单的基于 int 的键声音具有 639/640 和 640/1280 至少很奇怪。或者也许我做错了什么?
这是我的哈希函数(理论上,应该没有冲突 - 但数字非常接近):
现在,这已经不好笑了……
我写了这个哈希函数:
理论上,我应该有 100% 的碰撞率,对吧?但结果是:
为什么?
环境:MSVS2010
c++ - 按键排序 std::unordered_map
如何unordered_map
按键排序?我需要打印一个unordered_map
按键排序。
c++ - 使用 Visual C++ 2008 的 std::unordered_map 未声明标识符
我正在学习,无法弄清楚。编译器抛出类型unordered_map
未声明的错误。
我正在使用 Visual C++ 2008 速成版。
c++ - 使用 unordered_map 从两个大文本文件中删除重复项
我对很多这些 C++ 库都很陌生,所以如果我的问题显得幼稚,请原谅我。
我有两个大文本文件,每个大约 160 MB(每个大约 700000 行)。我需要从 file2 中删除所有出现在 file1 中的重复行。为了实现这一点,我决定使用带有 32 个字符串的 unordered_map 作为我的键。32 个字符的字符串是每行的前 32 个字符(这足以唯一标识该行)。
无论如何,所以我基本上只是通过第一个文件并将每行的 32 个字符子字符串推入 unordered_map。然后我浏览第二个文件并检查 file2 中的行是否存在于我的 unordered_map 中。如果它不存在,我将整行写入一个新的文本文件。
这适用于较小的文件..(每个 40 MB),但对于这 160 MB 的文件.. 插入哈希表需要很长时间(在我开始查看 file2 之前)。在大约 260,000 次插入时.. 它似乎已经停止或进展非常缓慢。有没有可能我已经达到了我的记忆力限制?如果是这样,任何人都可以解释如何计算这个吗?如果没有,我还能做些什么来让它更快吗?也许选择自定义哈希函数,或者指定一些有助于优化它的参数?
我在哈希表中的关键对象对是 (string, int),其中字符串总是 32 个字符长,而 int 是我用来处理重复项的计数。我正在运行带有 12 GB RAM 的 64 位 Windows 7 操作系统。
任何帮助将不胜感激..谢谢大家!
c++ - tr1 的 unordered_map 中的自定义分配器
关于 unordered_map 的自定义分配器,我有一些问题。我有一个大数据集,我需要将字符串作为键进行散列。所以我开始知道提供自定义内存分配器可以优化速度。但是我该怎么做呢?(我检查了 SO,但我找不到任何关于使用自定义分配器的信息,尽管有一些与自定义哈希函数等相关的东西)
还有 unordered_map::size() 返回什么?它说它是最长的受控序列。我对这意味着什么感到困惑。是桶数本身还是其他?
非常感谢
c++ - 将 typedef 映射插入哈希表
在下面的程序中,我有一个typedef map
. 我想要做的是实现一个哈希表。我正在尝试使用unordered_map
,因为我听说这是有效的,因为它需要 O(1) 时间。我在我的主程序(我正在处理的另一个程序)中使用我的typedef map
任何地方,所以我不想改变它。我想在其中一个函数中实现哈希表,我试图弄清楚如何将我的地图内容插入哈希表并稍后搜索密钥。我在两个遇到问题的地方插入了评论。请帮忙。
我感谢任何帮助或评论。
阅读 Jason 的评论后,我明白为什么我不能使用 astd::set
作为键,unordered_map
所以我尝试使用std::string
作为键,但该find
功能不起作用。请你帮助我好吗。