問題タブ [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 投票する
3 に答える
5240 参照

c++ - unordered_set: ポインター アドレスは適切なハッシュですか?

一連の (スマート) ポインターをハッシュ セットに格納したい<boost/unordered_set>。10 秒考えた後、次のハッシュ関数を思いつきました。

私の質問は: このハッシュは良い考えですか? 私は、このハッシュの衝突がゼロまたは非常に少ないという考えを楽しんでいます(おそらく、ボンネットの下にいくつかの素数モジュラスがあり、私の楽しみがすべて台無しになっています)。

意図的な詳細:ハッシュの目的は、大きなオブジェクトのストレージをリサイクルすることです。そのため、大きなオブジェクトが既にビンにあるかどうかをすばやく検出する方法が必要です。

そうでない場合、スマートまたはダムのいずれかのポインターの理想的なハッシュは何でしょうか?

0 投票する
2 に答える
4546 参照

c++ - 標準コンテナ用のstd::hashの特殊化はありませんか?

単純に使用できないことに少し驚いた

std::hashsの専門分野がないように思われるからですstd::array。何故ですか?それとも私は単にそれを見つけられませんでしたか?実際に何もない場合、次の実装の試みを簡略化できますか?

これはどういうわけか標準ライブラリの一部であるべきだと私は本当に感じています。

0 投票する
3 に答える
1834 参照

c++ - unordered_set のメモリを解放するには?

std::unordered_set が取ったメモリを解放する方法を教えてください。

unordered_set::clear() は、メモリを解放せずにセットをクリアすると思います。

unordered_set の保持をローカル関数で解放する必要があります。ローカル関数を呼び出すたびにメモリが消費されるため、ローカル関数の最後でメモリを解放する必要があります。

ありがとうございました

0 投票する
3 に答える
55955 参照

c++ - std::hashを専門化する方法::順序付けされていないコンテナのユーザー定義型のoperator()?

でユーザー定義のキータイプをサポートstd::unordered_set<Key>するには、ハッシュファンクターstd::unordered_map<Key, Value> を提供する必要があります。operator==(Key, Key)

コンパイラやライブラリに付属している型のように、型のデフォルトのハッシュstd::unordered_set<X>だけ を使用して記述する方が便利です。相談後X

専門化することは可能のようですstd::hash<X>::operator()

C ++ 11のコンパイラサポートはまだ実験的です---私はClangを試しませんでした---、これらは私の質問です:

  1. そのような特殊化を名前空間に追加することは合法stdですか?私はそれについて複雑な気持ちを持っています。

  2. std::hash<X>::operator()C ++ 11標準に準拠しているバージョンはどれですか?

  3. それを行うためのポータブルな方法はありますか?

0 投票する
1 に答える
1565 参照

c++ - unordered_set を使用する場合の構造体のネストされた構造体のハッシュ関数

構造体の一意のリストを維持するために unordered_set を使用しようとしています。構造体 Name のハッシュ関数を定義しましたが、別の構造体メンバー Address を含むように Name 構造体を拡張すると、コンパイル エラーが発生します。Address 構造体をハッシュする方法を指定する必要があることはわかっていますが、どこでどのようにハッシュするかがわかりません。

アップデート

完了するために、これは修正でした:

0 投票する
2 に答える
448 参照

c++ - std :: unordered_setクラスFooのメンバーとして

独自のタイプのunordered_setをメンバーとして持つクラスを作成しています。したがって、のスペシャライゼーションを作成する必要がありhash<Foo>ます。この特殊化は、Fooが宣言された後に定義する必要があります。hash<Foo>しかし、メンバーを定義する前に、すでに専門化が必要であるように思えunordered_set<Foo>ます。少なくとも、コンパイルされず、そこで失敗します。ハッシュテンプレートの前方宣言を試みましたが、それでも機能させることができませんでした。

関連するコードスニペットは次のとおりです。

前もって感謝します

0 投票する
5 に答える
1036 参照

c++ - キーと値のペアの値のみを格納するように順序付けされていないSTLコンテナを適応させる方法は?

新しいC++11標準には、順序付けされていないコンテナーがあります。特に、(デフォルトのハッシュ関数)に基づいた場所にをstd::unordered_map<Key, Value>格納します。同様に、に基づいた場所にキーを格納します。std::pair<Key, Value>std::hash<Key>std::unordered_set<Key>std::hash<Key>

私の質問は、キーと値のペアの値のみをに基づいた場所に格納するにはどうすればよいstd::hash<Key>ですか?これは、完全なハッシュ関数を使用する場合、つまり、異なるキーが異なるハッシュインデックスにマップされる場合に役立ちます(したがって、衝突の解決は必要ありません)。

unordered_setはキーのみを使用し、unordered_mapはキーと値の両方を使用するため、新しいC++11標準のunorderedSTLコンテナーではそのようなカスタマイズは許可されていないようです。既存のSTLコンテナからそのようなデータ構造を取得するための良い方法は何でしょうか?

より一般的には、キーの署名を表すタイプはどこにあるかにstd::pair<T, Value>基づいて、をどのように場所に格納できますか?たとえば、Keyが大規模なデータ構造である場合、64ビットのハッシュキーを計算し、これを2つの32ビット部分に分割します。上位32ビットとValueがaを形成し、下位32ビットがこの場所を決定します。ペアが保存されます。std::hash<Key>Tstd::pair<uint32_t, Value>

これが役立つアプリケーションは、たとえばコンピュータチェスです。この場合、キータイプとしての位置(一部のプログラムでは数キロバイト)が64ビットキーにハッシュされ、そのうち上位32ビットと一部の検索関連情報のみが値として使用されます。タイプはstd::pair、ハッシュキーの下位32ビットに基づく場所に(通常は合計16バイトのみ)格納されます。

0 投票する
2 に答える
3533 参照

c++ - gcc v4.1.2 で unordered_set のヘッダーを取得するには?

Boostをインストールせずにunordered_setを使いたい。追加しようとしまし--std=gnu++0xたが、認識されたオプションではありません。v4.1.2 には unordered_set が含まれていますか? もしそうなら、どうすればヘッダーファイルを取得できますか?

これは Centos 4 マシンです。

0 投票する
3 に答える
19605 参照

c++ - 順序付けされていないセットでのコンパイルの問題

unordered_setC++stdライブラリのを使用しようとしています。std名前空間を使用しています。

これunordered_setは私の機能の範囲内です。いくつかの値をメモするために使用したいと思います。

ただし、次のコンパイルエラーが発生します。

CplusplusExperiment.cpp:関数内'int do_crazy_calculations(int)'
CplusplusExperiment.cpp:10:10:エラー:'unordered_set'タイプに名前を付けていません
make:***[CplusplusExperiment.o]エラー1

しかし、私はタイプをunordered_set-に割り当てましたintよね?このエラーはどういう意味ですか?

0 投票する
3 に答える
75150 参照

c++ - C++で順序付けられていないセットをどのように反復しますか?

順序付けられていないセットがあるとします

それをどのように繰り返すのですか?各要素に一度到達する限り、任意の順序で反復する必要はありません。私は試した

無駄に。