问题标签 [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.
c++ - unordered_set:指针地址是一个好的散列吗?
我想在哈希集中存储一组(智能)指针<boost/unordered_set>
。经过 10 秒的思考,我想出了这个哈希函数:
我的问题是:这个哈希是个好主意吗?我认为这个哈希将有零或很少的冲突(也许引擎盖下有一些素数模数破坏了我所有的乐趣)。
目的的更多细节:哈希的目的是回收大对象的存储,所以我需要一种快速的方法来检测一个大对象是否已经在垃圾箱中。
如果不是,那么对于智能或哑指针来说,理想的哈希是什么?
c++ - 标准容器没有 std::hash 的特化吗?
我只是发现自己有点惊讶不能简单地使用
因为似乎没有 s 的std::hash
专业化std::array
。这是为什么?还是我根本没找到?如果确实没有,是否可以简化以下实现尝试?
我真的觉得这应该以某种方式成为标准库的一部分。
c++ - 如何释放 unordered_set 的内存?
我想知道如何释放 std::unordered_set 占用的内存?
我认为 unordered_set::clear() 只是清除集合而不释放内存。
我需要释放本地函数持有的 unordered_set 。每次调用本地函数都会消耗一些内存,所以我需要在本地函数结束时释放它。
谢谢
c++ - 如何专门化 std::hash::operator() 用于无序容器中的用户定义类型?
为了支持用户定义的键类型,std::unordered_set<Key>
必须std::unordered_map<Key, Value>
提供operator==(Key, Key)
一个散列函子:
std::unordered_set<X>
仅使用type的默认哈希编写会更方便X
,例如编译器和库附带的类型。咨询后
- C++ 标准草案 N3242 §20.8.12 [unord.hash] 和 §17.6.3.4 [hash.requirements],
- Boost.Unordered
- 克++
include\c++\4.7.0\bits\functional_hash.h
- VC10
include\xfunctional
- Stack Overflow 中的各种相关问题
似乎可以专攻std::hash<X>::operator()
:
鉴于对 C++11 的编译器支持尚处于试验阶段——我没有尝试 Clang——,这些是我的问题:
将这样的专业化添加到命名空间是否合法
std
?我对此有复杂的感觉。哪个
std::hash<X>::operator()
版本(如果有)符合 C++11 标准?有便携的方法吗?
c++ - 使用 unordered_set 时结构中嵌套结构的散列函数
我正在尝试使用 unordered_set 来维护唯一的结构列表。我已经为结构 Name 定义了哈希函数,但是当我扩展 Name 结构以包含另一个结构成员 Address 时收到编译错误。我知道我需要指定必须如何对 Address 结构进行散列,但我似乎无法弄清楚在哪里/如何。
更新
只是为了完成,这是修复:
c++ - std::unordered_set作为 Foo 类的成员
我正在编写一个具有自己类型的 unordered_set 作为成员的类。因此,我需要为hash<Foo>
. 这个特化需要在声明 Foo 之后定义。但在我看来,好像hash<Foo>
在定义成员之前我已经需要专业化了unordered_set<Foo>
。至少它没有编译并在那里失败。我尝试了哈希模板的前向声明,但也无法使其正常工作。
相关的代码片段是:
提前致谢
c++ - 如何调整无序 STL 容器以仅存储键值对的值?
新的 C++11 标准具有无序容器。特别是,std::unordered_map<Key, Value>
存储std::pair<Key, Value>
在一个基于std::hash<Key>
(默认散列函数)的位置。同样,std::unordered_set<Key>
将 Key 存储在基于 的位置std::hash<Key>
。
我的问题是:如何仅将键值对的值存储在基于的位置std::hash<Key>
?如果使用完美的散列函数,即不同的键映射到不同的散列索引(因此永远不需要冲突解决),这将很有用。
unordered_set 只使用键,而 unordered_map 同时使用键和值,因此新 C++11 标准中的无序 STL 容器似乎不允许这种自定义。从现有的 STL 容器中获取这种数据结构的好方法是什么?
更一般地说,如何将 a 存储std::pair<T, Value>
在基于 的位置中std::hash<Key>
,T
表示密钥签名的类型在哪里?例如,如果 Key 是一个大型数据结构,我想计算一个 64 位哈希键并将其分成两个 32 位部分:高 32 位与值一起形成 a std::pair<uint32_t, Value>
,低 32 位确定它的位置存储对。
这将是有用的应用程序,例如计算机国际象棋,其中作为密钥类型的位置(在某些程序中为数 KB)被散列为 64 位密钥,其中只有高 32 位和一些搜索相关信息作为值type 以 a std::pair
(通常总共只有 16 个字节)的形式存储在基于哈希键的低 32 位的位置中。
c++ - 如何在 gcc v4.1.2 中获取 unordered_set 的标头?
我想在不安装 Boost 的情况下使用 unordered_set。我试图添加--std=gnu++0x
,但它不是一个公认的选项。v4.1.2 是否包含 unordered_set?如果是这样,我如何获取它的头文件?
这是一台 Centos 4 机器。
c++ - 无序集的编译问题
我正在尝试使用unordered_set
C++ 标准库中的一个。我正在使用 std 命名空间。
这unordered_set
是在我的功能范围内。我想用它来记忆一些值。
但是,我收到此编译错误:
CplusplusExperiment.cpp:在函数中
'int do_crazy_calculations(int)'
:
CplusplusExperiment.cpp:10:10:错误:'unordered_set'
未命名类型
make:*** [CplusplusExperiment.o] 错误 1
但是,我确实分配了一个类型unordered_set
-int
对吧?这个错误是什么意思?
c++ - 如何遍历 C++ 中的无序集?
假设我有一个无序集
我如何迭代它?我不需要以任何顺序进行迭代——只要我到达每个元素一次。我试过
无济于事。