Questions tagged «unordered-map»

12
如果使用的是普通键,使用地图而不使用unordered_map有什么优势吗?
最近一次有关unordered_mapC ++的讨论使我意识到,由于查找效率高(摊销O(1)与O(log n)),我应该unordered_map在map以前使用过的大多数情况下使用。大多数情况下,我使用地图,或者使用或作为密钥类型。因此,我对散列函数的定义没有任何问题。我想得越多,就越发意识到,对于简单类型的键,我找不到使用over的任何原因-我看了一下接口,却没有发现任何原因会影响我的代码的重大差异。intstd::stringstd::mapstd::unordered_map 因此,问题:是否有使用任何真正的原因std::map在std::unordered_map简单类型等的情况下int和std::string? 我是从严格的编程角度询问的-我知道它还没有完全被认为是标准的,并且可能会带来移植方面的问题。 另外,我希望正确的答案之一可能是“由于开销较小(对于较小的数据集,效率更高)”(是吗?),因此,我想将问题限制在以下情况:键是不平凡的(> 1,024)。 编辑: h,我忘了明显的东西(感谢GMan!)-是的,当然,地图是有序的-我知道,并且正在寻找其他原因。

2
使用自定义类类型作为键的C ++ unordered_map
我正在尝试使用自定义类作为的键unordered_map,如下所示: #include <iostream> #include <algorithm> #include <unordered_map> using namespace std; class node; class Solution; class Node { public: int a; int b; int c; Node(){} Node(vector<int> v) { sort(v.begin(), v.end()); a = v[0]; b = v[1]; c = v[2]; } bool operator==(Node i) { if ( i.a==this->a && i.b==this->b &&i.c==this->c …

3
如何在无序容器中将std :: hash <Key> :: operator()专用于用户定义的类型?
为了支持用户定义的键类型std::unordered_set&lt;Key&gt;和std::unordered_map&lt;Key, Value&gt; 一个具有提供operator==(Key, Key)和散列函子: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; 仅std::unordered_set&lt;X&gt; 使用type 的默认哈希值编写将更方便X,例如与编译器和库一起提供的类型。经过咨询 C ++标准草案N3242§20.8.12 [unord.hash]和§17.6.3.4[hash.requirements], 增强无序 g ++ include\c++\4.7.0\bits\functional_hash.h …

4
如何在map和unordered_map之间选择?
假设我想使用字符串作为键来映射数据。什么容器应该怎么选择,map还是unordered_map?unordered_map占用更多的内存,所以让我们假设内存不是问题,而关注的是速度。 unordered_map通常应该给出O(1)的平均复杂度,而O(n)的最坏情况。在什么情况下会达到O(n)?什么时候map可以获得比更高的时间效率unordered_map?当n小时会发生吗? 假设我将STLunordered_map与默认的haser Vs一起使用。地图。字符串是关键。 如果我要遍历元素而不是每次都访问单个元素,我应该优先map吗?

2
std :: unordered_map运算符[]是否对不存在的密钥进行零初始化?
根据cppreference.com,std::map::operator[]对于不存在的值进行零初始化。 但是,同一站点没有提及的零初始化std::unordered_map::operator[],但确实有一个依赖于此的示例。 当然,这只是参考站点,而不是标准站点。那么,下面的代码是否正确? #include &lt;unordered_map&gt; int main() { std::unordered_map&lt;int, int&gt; map; return map[42]; // is this guaranteed to return 0? }

1
在使用GCC的unordered_map :: insert KeyEqual异常期间发生内存泄漏-破坏了强有力的异常安全保证吗?
我正在使用GCC 7.3.1,但也在coliru(我相信它是9.2.0版)上进行了测试。使用以下内容进行构建: g++ -fsanitize=address -fno-omit-frame-pointer rai.cpp 这里是rai.cpp: #include &lt;iostream&gt; #include &lt;unordered_map&gt; int main() { try { struct MyComp { bool operator()(const std::string&amp;, const std::string&amp;) const { throw std::runtime_error("Nonono"); } }; std::unordered_map&lt;std::string, std::string, std::hash&lt;std::string&gt;, MyComp&gt; mymap; mymap.insert(std::make_pair("Hello", "There")); mymap.insert(std::make_pair("Hello", "There")); // Hash match forces compare } catch (const std::exception&amp; e) { …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.