问题标签 [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.

0 投票
2 回答
2529 浏览

c++ - 如何在 boost::unordered_map 中使用自定义类型的键?

我现在正在一个项目中使用 Boost 的哈希映射实现,并且我正在尝试为键实现自定义类型。我有四个无符号整数,我想将它们组合成一个 128 位数据类型以用作键。

我创建了一个包含四个元素的 32 位整数数组的结构,用作我的存储。老实说,我不确定 Boost 的哈希映射是如何工作的,所以我不确定我在这里做什么,但我遵循了 Boost 文档(http://www.boost.org/doc/libs/1_37_0 /doc/html/hash/custom.html ) 用于扩展 boost::hash,我创建了一个哈希函数,以及一个自定义比较运算符。

我在标题中定义了这个自定义类型。这是我的代码:

现在,当我在 Boost 的无序映射中实际使用这种类型时,我的代码可以编译,但无法链接。链接器声称我在多个目标文件中多次定义了一个符号。我真的很想让我的 128 位类型与这张地图一起工作。关于我搞砸的任何提示,或更好的方法?

0 投票
2 回答
5818 浏览

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

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

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

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

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

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

非常感谢, Onur

0 投票
2 回答
11282 浏览

c++ - 保留插入顺序的 C++ 哈希映射

我有以下代码:

但是,我正在寻找保留顺序的东西,以便稍后我可以按照插入元素的相同顺序迭代元素。在我的电脑上,上面的代码不保留订单,并打印以下内容:

我想也许我可以使用boost::multi_index_container

有人可以告诉我如何使用这个容器(或任何其他适当的容器)实现我的原始代码,以便迭代器遵循插入顺序吗?

0 投票
2 回答
6490 浏览

c++ - C++ unordered_map 问题

这次我可以展示一个完整的代码:

这输出:

知道发生了什么吗?

提前致谢,
Onur

0 投票
2 回答
12800 浏览

c++ - 为 unordered_map 定义自定义散列函数和相等函数

我正在尝试定义一种具有自定义哈希函数和相等比较函数的 unordered_map 类型。这些函数的函数原型如下:

我声明了这些函数原型,然后我尝试如下声明类型:

但它说 VertexSetHashFunction 和 SetEqual 不是有效的模板类型参数。文档令人困惑,因为它没有确切说明模板参数应该是什么类型 - 我只是应该像我在这里所做的那样给它函数,还是有一些其他类型的对象封装了函数(因为文档确实谈到了“散列函数对象类型”)?

0 投票
15 回答
241140 浏览

c++ - 在微不足道的键的情况下,使用 map 而不是 unordered_map 有什么优势吗?

最近一次关于unordered_mapC++ 的讨论让我意识到,由于查找的效率(amortized O(1) vs. O(log n)unordered_map ),我应该在我以前使用的大多数情况下使用它。大多数时候我使用地图,我使用或者作为键类型;因此,我对哈希函数的定义没有任何问题。我想得越多,我就越意识到在简单类型的键的情况下我找不到任何使用 a over a的理由——我查看了接口,没有找到任何会影响我的代码的重大差异。mapintstd::stringstd::mapstd::unordered_map

因此,问题是:在像and这样的简单类型的情况下,是否有任何真正的理由使用std::mapover ?std::unordered_mapintstd::string

我是从严格的编程角度提出的问题——我知道它没有被完全认为是标准的,而且它可能会给移植带来问题。

另外,我希望正确的答案之一可能是“对于较小的数据集更有效”,因为开销较小(这是真的吗?) - 因此我想将问题限制在密钥是非平凡的(> 1 024)。

编辑: 呃,我忘记了明显的(感谢 GMan!)——是的,地图当然是有序的——我知道,并且正在寻找其他原因。

0 投票
5 回答
2012 浏览

c++ - 在生产中使用 std::tr1 是否值得?

我正在使用 MS VC 2008 和一些项目英特尔 C++ 编译器 11.0。是否值得在生产中使用 tr1 功能?他们会保持新的标准吗?

例如,现在我使用stdext::hash_map. TR1 定义std::tr1::unordered_map. 但是在 MS 中实现unordered_map只是他们的stdext::hash_map,以另一种方式模板化。

0 投票
4 回答
10986 浏览

c++ - unordered_map (C++) 中迭代器的效率

我似乎找不到任何关于此的信息,所以我求助于 stackoverflow。C++ 中 std::tr1::unordered_map 的迭代器效率如何?尤其是与列表迭代器相比。制作一个包装类是否有意义,该类还包含列表中的所有键以允许有效迭代(我的代码确实对 unordered_map 中的键使用了大量迭代)。对于那些会推荐 boost 的人,我不能使用它(无论出于何种原因)。

0 投票
3 回答
881 浏览

c++ - 有什么 hashmap 可以做但 map 不能做的事情吗?

我只知道hashmap和map的区别是hashmap是用hash函数实现的,而map是用tree实现的。任何机构都可以添加更多内容吗?

基于此,有什么 hashmap 可以做而 map 不能做的事情吗?

0 投票
1 回答
224 浏览

c++ - 按其他字符串索引字符串

我需要用其他字符串索引特定字符串,但我真的找不到这样做的好方法。我尝试使用 tr1::unordered_map,但我在使用它时遇到了一些困难。如果有人能告诉我最好的方法是什么,我将不胜感激:) 我还需要用数字索引对象(数字不按顺序排列,所以我不能使用向量)