问题标签 [unordered-set]

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 回答
1240 浏览

c++ - 提升无序集不起作用

我是新手。我正在尝试实现 boost::unorder_set。这是代码:

我收到以下错误:

我的实施有什么问题?提前谢谢。

0 投票
2 回答
3948 浏览

c++ - Unordered_set 问题

谁能解释一下无序集是如何工作的?我也不确定一组是如何工作的。我的主要问题是它的查找功能的效率是多少。

例如,这个总的大 O 运行时间是多少?

0 投票
1 回答
602 浏览

boost - boost/unordered_set: 使用 mingw () 编译错误

我有一段使用 boost 的 unordered_set 的代码

它可以在 unix 下与 gcc 一起编译并正常工作。当我尝试使用 mingw32 (gmake 3.8.1) 进行交叉编译时,我收到以下消息:

对我来说,这似乎是一个与模板相关的问题;有什么建议么?

谢谢你,马蒂亚


[编辑]

其他增强功能可用,例如词法转换

0 投票
3 回答
5571 浏览

boost - C++:shared_ptr 作为 unordered_set 的键

考虑以下代码

问题是:为什么 s2 的大小是 2 而不是 1?我很确定它一定与哈希函数有关。我尝试查看 boost 文档并在没有运气的情况下使用散列函数。

想法?

0 投票
1 回答
1440 浏览

performance - 无序集(const char)比无序集(字符串)慢得多

我正在将一个很长的列表从磁盘加载到 unordered_set 中。如果我使用一组字符串,它会非常快。大约 7 MB 的测试列表在大约 1 秒内加载。但是,使用一组 char 指针大约需要 2.1 分钟!

这是字符串版本的代码:

这是 char* 版本的代码:

“new(mem)”是因为我使用了自定义内存管理器,所以我可以分配大块内存并将它们分配给像 c 字符串这样的小对象。但是,我已经用常规的“新”测试了它,结果是相同的。我还在其他工具中使用了我的内存管理器,没有任何问题。

这两个结构是根据实际的 c 字符串而不是其地址进行插入和查找哈希所必需的。我实际上在堆栈溢出时在这里找到了 unordered_deref。

最终我需要加载数千兆字节的文件。这就是我使用自定义内存管理器的原因,但这也是为什么这种可怕的减速是不可接受的。有任何想法吗?

0 投票
5 回答
5254 浏览

c++ - size_t:运营商?(以及一种使用 unordered_set 的方法)

什么是

环境:Visual Studio 2010 Professional


TL; 博士

今天我正在寻找一种使用std::tr1::unordered_set. 因为上次问了怎么用,所以决定自己去查一下。std::map

我用谷歌搜索,大部分结果告诉我有一个结构来做散列。这条路对我来说看起来有点复杂,我一直在寻找,终于找到了另一种方法。

我需要实施

生成的代码接近问题的结尾。

==熟悉没有任何问题。size_t也很熟悉。但什么是operator size_t

似乎equalshashCodeJava 一样,需要根据 Effective Java 一起重写。但我不确定,尤其是当名字是size_t.


结果代码如下。完整的程序运行良好,并产生正确的输出。


多一点点:

不是

无法编译:

即使没有

但正如我所见,函数返回int. 错误代码如下:

0 投票
4 回答
33805 浏览

c++ - unordered_map / unordered_set 中元组的通用哈希

为什么不std::unordered_map<tuple<int, int>, string>开箱即用?必须为 定义一个散列函数是很乏味的tuple<int, int>,例如

构建一个以元组为键的无序映射(Matthieu M.) 展示了如何为boost::tuple. 有没有在不使用可变参数模板的情况下为 c++0x 元组执行此操作?

当然这应该是标准:(

0 投票
2 回答
2922 浏览

c++ - boost::unordered_map -- 需要为散列 std::set 指定一个自定义散列函数?

我想使用boost::unordered_map<key,value>keya在哪里std::set<int>。由于一组整数不是内置类型,我假设我必须提供我自己的哈希函数(或者,更确切地说,我正在考虑使用boost 的 hash_range)。

但是,现在我尝试像这样初始化哈希映射,既不提供哈希函数也不提供相等谓词——gcc 没有抱怨。这里发生了什么?boost 是否足够聪明,可以自己散列 STL 容器?这会比我使用自定义哈希函数慢吗?怎么用boost::hash_range

提前致谢。

0 投票
3 回答
10650 浏览

c++ - 将元素存储在 unordered_set 中与将它们存储在 unordered_map 中

假设我有以下用户结构:

我需要存储一组用户记录(大约 10^5 个用户,也可以扩大规模)。如果我将其存储为 unordered_set 或 unordered_map,性能会更好吗?Unordered_set 在技术上与 HashSet 相同,unordered_map 与 HashMap 相同,对吧?使用常规集合(有序)不是一个选项,因为当元素数量增加时插入和删除会变得非常慢。

或者

我需要它在插入、删除和通过其 userId 访问特定用户对象方面非常快。

0 投票
4 回答
1005 浏览

c++ - 获取 unordered_set 中最右边的元素(或反向打印内容)

我有一个 unordered_set 如下:

然后我执行了另一个函数,它删除了 unordered_set 中大约 85% 的元素。(要删除的元素取决于此函数的逻辑,但这并不重要,因为所有元素最初都是按顺序插入的)。

现在,在擦除 unordered_set 中的一些元素之后,我想打印仍然保留在该 unordered_set 中的最后一个元素。比如元素 9997、9998、9999 和 10000 已被擦除,所以这个集合中剩余的最大元素是 9996。如何做到这一点?
如果使用基本套装,我可以执行以下操作:

在一个集合中,我们有 reverse_iterator 和 rbegin(),但这在 unordered_set 中不存在。我之所以没有基本设置是因为我需要将元素大小放大到 10^8。使用常规集(基于红黑树)确实会降低性能(尤其是在处理插入和删除时)。我怎样才能做到这一点?将最后剩余的 unordered_set 复制到向量中会起作用,但这当然需要时间。我怎样才能通过使用更智能的方式来实现这一目标?我注意到我也不能做类似的事情: