タグ付けされた質問 「unordered-map」

12
簡単なキーの場合にunordered_mapよりもmapを使用する利点はありますか?
unordered_mapC ++での最近の話で、ルックアップの効率性(償却済みのO(1)とO(log n))のため、以前に使用unordered_mapしたほとんどの場合に使用する必要があることに気付きました。ほとんどの場合、マップを使用します。または、キータイプとしてまたはを使用します。したがって、ハッシュ関数の定義に問題はありません。考えれば考えるほど、単純なタイプのキーの場合にオーバーを使用する理由が見つからないことに気付きました。インターフェースを調べたところ、何も見つかりませんでした。私のコードに影響を与える重要な違い。mapintstd::stringstd::mapstd::unordered_map そこで質問:使用する任意の本当の理由があるstd::map以上std::unordered_mapのような単純なタイプの場合intとはstd::string? 私は厳密にプログラミングの観点から質問しています。これは完全に標準とは見なされておらず、移植に問題が発生する可能性があることを知っています。 また、正しい答えの1つは、オーバーヘッドが小さいため、「データセットが小さいほど効率的である」と思われます(それは本当ですか)。したがって、質問の量がキーは自明ではありません(> 1 024)。 編集: ああ、私は明白なことを忘れました(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; コンパイラとライブラリに付属する型の場合のように、typeのデフォルトのハッシュだけstd::unordered_set&lt;X&gt; で記述する方が便利ですX。相談後 C ++標準ドラフトN3242§20.8.12 [unord.hash]および§17.6.3.4[hash.requirements]、 Boost.Unordered g ++ include\c++\4.7.0\bits\functional_hash.h VC10 …

4
mapとunordered_mapのどちらを選択するのですか?
文字列をキーとしてデータをマッピングしたいとします。どのコンテナを選択するmap必要がありunordered_mapますか?unordered_mapより多くのメモリを消費するので、メモリは問題ではなく、問題は速度であると仮定しましょう。 unordered_map一般に、O(n)の最悪の場合でO(1)の平均計算量を与えるはずです。どのような場合にO(n)に到達しますか?いつmapよりも時間効率が良くなりunordered_mapますか?nが小さいときに起こりますか? unordered_mapデフォルトのhaserVsでSTLを使用すると仮定します。地図。文字列がキーです。 毎回個々の要素にアクセスするのではなく、要素を反復処理する場合は、どちらを選択する必要がありmapますか?

2
std :: unordered_map operator []は、存在しないキーに対してゼロ初期化を行いますか?
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を使用していますが、coilluでもテストされています。これはバージョン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) { …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.