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

c++ - tr1::hash for boost::thread::id?

我开始使用命名空间中的unordered_settr1来加速对普通(基于树的) STL 的访问map。但是,我想在 boost( boost::thread::id) 中存储对线程 ID 的引用,并意识到这些标识符的 API 是如此不透明,以至于您无法清楚地获得它的哈希值。

令人惊讶的是,boost 实现了部分tr1(包括hashunordered_set),但它没有定义能够散列线程 ID 的散列类。

查看文档,boost::thread::id我发现线程 ID 可以输出到流中,所以我的哈希解决方案是这样的:

也就是说,对其进行序列化,将哈希应用于结果字符串。但是,这似乎比实际使用 STL 效率低map<boost::thread::id>

所以,我的问题是:你找到更好的方法了吗?不强制一个hash<boost::thread::id>类的存在是否在 boost 和 tr1 中都存在明显的不一致?

谢谢。

0 投票
3 回答
3192 浏览

c++ - C++ STL 容器中的 NULL 指针

不幸的是,我没有完全开发自己开发的程序。我最近注意到 unordered_set 的运算符 - 上的 Visual Studio 致命错误,它是通过简单插入指向 unordered_set 的指针来调用的。在查看了当地人之后,我注意到 set 只有 2 个元素,最后一个是 NULL (所以我想这就是它崩溃的原因)。现在问题来了:(理论上)unordered_set(或任何其他 STL 容器)如何将 NULL 指针作为其元素之一。程序是多线程的,但根据我的评论,这部分代码只能从一个线程访问。谢谢。

调用堆栈和部分源代码供感兴趣的人 参考: http ://privatepaste.com/c8e7f35a4e(PushToProcessed 是从 Object 本身调用的,它传递对自身的引用,因此不能为 NULL)

0 投票
1 回答
1714 浏览

c++ - 通过哈希值和谓词搜索 std::unordered_set

如何搜索 std::unordered_set 知道哈希值并拥有一些谓词对象?(谓词通过pred(x) && pred(y)意义确定等价x == y。)

0 投票
3 回答
1434 浏览

c++ - 将 boost::unordered_set 作为结果映射传递给 boost::split

有谁知道将 boost::unordered_set 作为第一个参数传递给 boost::split 是否符合规定?在 libboost1.42-dev 下,这似乎会导致问题。这是一个导致问题的小示例程序,称为 test-split.cc:

然后,如果我运行以下命令:

我在 valgrind 中收到了一堆抱怨,就像下面的一样(我有时也会看到没有 valgrind 的核心转储,尽管它似乎因时间而异):

这是一个 Debian Squeeze 盒子;这是我的相关系统信息:

但是,如果我将 libboost1.42-dev 降级为 libboost1.40-dev,代码似乎可以正常工作。那么这是 boost 1.42 中的一个错误,还是我通过传入一个无法处理序列的容器来滥用 boost::split?谢谢!

0 投票
2 回答
289 浏览

c++ - 使用 unordered_set 防止不同哈希值的键落在同一个桶中

这可能是一个愚蠢的问题,但这里有:

我将一个单词字典散列到一个基于 unordered_set 的散列表中。我的哈希函数是故意“坏”的,因为所有包含相同字母集的字符串都会哈希到相同的值。我最初试图超越正常的哈希函数行为,并使用每个单词中字母的“频率直方图”作为哈希值(我了解到这是不可能的:)),但其中一个线程建议使用 26-位掩码来实现相同的。到目前为止,哈希函数工作得很好。

例如,在我的方案中,CITIED 和 CITED 哈希到相同的值,1049144。我的想法是给定一组字母,我想找到包含该组字母的所有单词。

我猜我还没有完全理解散列的概念(或者我的代码完全错误),因为我无法完全解释我遇到的行为:
我决定查找所有由字符串中的字母组成的单词“活”。我的输出(带有哈希键)如下:

CURTSEYED 到底是怎么降落在那里的?可以看出,它具有与其余三个单词不同的哈希值。我对哈希表的理解/实现的错误在哪里?

产生上述输出的代码:

code>

My hash function :

Comparison function :

0 投票
1 回答
308 浏览

c++ - unordered_set 的 TCHAR* 要求?

我想使用像 .Net HashSet 这样的数据结构,我尝试将 unordered_set 与默认散列方法和自定义比较器一起使用,如下所示:

问题是当我尝试使用 HashtSet 来查找find我刚刚添加的特定键(使用方法)insert时返回HashSet::end()

你能解释一下是什么问题吗?我在VS2010下使用VC++

0 投票
2 回答
2555 浏览

c++ - std::unordered_set 构造函数

我一直在研究 unordered_set 的构造函数。在不设置哈希桶数量的情况下,是否无法使用自定义分配器实例构造 unordered_set?我真的不想弄乱实现细节,因为我想要一个自定义分配器,并且该类型没有为默认值提供任何定义。MSDN 只为构造函数提供了三个重载,没有一个非常有用。

编辑:神圣的废话。我的std::hash 的STL 实现不会专门用于具有自定义分配器类型的字符串——它只能执行显式类型定义std::string 和std::wstring。我的意思是,我可以理解不想尝试散列随机字符串,而仅仅是因为它有一个自定义分配器?这让我感到厌恶。

解决了问题,但重复建设和复制?呜呜呜。

0 投票
4 回答
16762 浏览

c++ - Boost - unordered_set 教程/示例/任何东西?

我想unordered_set在一个项目中使用。

但是,它的文档要么不完整,要么只是技术参考,没有示例。

任何人都可以提供处理它的在线资源的链接吗?也欢迎书籍,最好是免费的。谷歌搜索没有返回任何有价值的东西。

谢谢!

0 投票
1 回答
1653 浏览

c++ - C++ tr1 unordered_set 随机唯一子集的最快方法

这个问题与 这个有关,更准确地说与的答案有关。

这里是:我有一个 C++/TR1 unordered_setU的无符号整数(粗略的基数 100-50000,粗略的值范围为 0 到 10^6)。给定一个基数N,我想尽快N迭代U. 没有典型的价值N,但它应该对小的工作很快N

更详细地说,这里的“随机性”概念是两个调用应该产生一些不同的子集——差异越大越好,但这不是太重要。例如,只要块的起始索引是随机的,我就会对 的N成员的连续(或环绕的连续)块感到满意。U相同成本的非连续性更好,但主要关注的是速度。U变化温和,但在调用之间不断变化(在调用之间插入/删除大约 0-10 个元素)。

我走了多远:

  1. 简单的方法:
    选择随机索引i,使得(i+N-1) < |U|. 获取 的迭代器it,使用 将U.begin()其推进i时间it++,然后在子集上开始实际循环。优点:容易。缺点:浪费++'es。

  2. 桶方法(这是我从上面的链接“新”派生的):如上所述
    选择i,找到第 -th 元素所在的桶bi获取 local_iterator litU.begin(b)前进,直到我们击中 的lit-th元素,从那时起,不断递增。如果我们到达桶的末端,我们从下一个桶的开头继续。如果我想让它更随机,我可以完全随机选择并环绕桶。lit++iUlitNliti

我的未解决问题:

  1. U对于上面的第 2 点,一旦我找到第i-th 元素,我真的无法以某种方式进入迭代器吗?这将使我免于存储桶边界控制等。对于我作为一个初学者来说,标准的前向迭代器应该知道如何在第 - 项U时继续遍历似乎是不可理解的i,但是当我i自己找到第 - 项时,它除了通过上面的第 2 点之外,应该无法穿越U
  2. 我还可以做些什么?你知道什么更聪明/更随机的吗?如果可能的话,我不想参与到桶大小、哈希函数等的手动控制中,因为这有点让我头疼。
0 投票
3 回答
2111 浏览

c++ - 哈希表和二维向量

我想将 2d 向量逐行推送到哈希表中,然后在哈希表中搜索一行(向量)并希望能够找到它。我想做类似的事情

我不确定如何在集合中插入和查找向量。因此,如果有人可以指导我,那将很有帮助。谢谢

更新:

我意识到std::set这不是我决定使用的哈希表,unordered_map但我应该如何在其中插入和查找元素: