問題タブ [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++ - Visual C++ および clang での C++11 unordered_set の使用
クロスプラットフォームの C++ アプリケーションで std::unordered_set を使用しようとしています。Windows の Visual C++ では魅力的にコンパイルされて動作しますが、Mac OS X の clang では致命的なコンパイル エラーが発生します。
なぜそれが起こるのか、これを機能させる正しい方法は何かを知りたいです。
コード例:
クラン出力:
@mfontanini の提案を使用したUPD作業実装: https://gist.github.com/vbo/6090142。
c++ - unordered_set の使用方法
次のように unordered_set を定義しようとしています。
コンパイルすると、次のエラーが発生します。
C++ 標準は、この型のハッシュを提供していません。
クラスPoint:
- Pointのハッシュ関数を定義する方法/場所は?
- 2D ポイントの適切なハッシュ関数は何でしょうか?
c++ - バケット反復子を介して std::unordered_set から要素を削除することは可能ですか?
std::unordered_set質問にあるように、バケット イテレータ ( ) を使用して要素を削除できますlocal_iteratorか? 考えられる解決策は 2 つあります。
- erase() は global のみを受け入れるため
iterator、同等の機能はありlocal_iteratorますか? - と同等のグローバルを取得することは可能
iteratorですlocal_iteratorか?
不可能な場合は、不可能な理由を詳しく説明してください。
c++ - unordered_set のカスタム ポインター型のハッシュ
一意のエッジを持つ unordered_set を持つことができるように、Edge 構造体をハッシュしようとしています。私の場合、エッジの 2 つのエンドポイントの組み合わせが以前のセットで検出されなかった場合、エッジは一意であると見なされます。
私のコードは、Edge 型だけを含む unordered_set に対しては正常に動作しますが、Edge 型へのポインターに対しては動作しません。以下のやや長いコードを参照してください。どんな助けでも大歓迎です。
これは出力です:
だから私の質問は: 2 番目の要素が 2 番目のテーブルに追加されるのはなぜですか? ハッシュ関数を確認しましたが、両方のエントリに対して同じキーが返されるため、それが原因ではないようですが、他に何が考えられるかはわかりません。
編集:
が呼び出されていないことがわかりましたが、そのinline bool operator==(const Edge* other) const理由はわかりません。
c++ - unordered_set 非 const イテレータ
テスト目的で、小さな unordered_set を作成し、セットを反復しようとしました。セットは独自のクラスを保持します。
いくつかの要素を挿入し、反復中にオブジェクトを変更しようとしました:
(const_local_iterator ではなく) local_iterator を使用しましたが、それでもオブジェクトを変更できません。何らかの理由で、反復子はまだ定数オブジェクトを参照しています。
私の質問:なぜそうなのですか?通常の反復子が const オブジェクトを参照する場合、const と非 const 反復子の違いは何ですか?
VisualStudio 2013 および minGW でテスト済み。
助けてくれてありがとう:-)
編集:ハッシュ関数:
同じ質問をする将来このトピックの発見者のために、matrNrを暴力的に変更した場合の出力例を次に示します。
それを表示してみてください:
あなたは次のようなものを得るかもしれません:
バケット番号: 0
空のバケット
バケット番号: 1
マトリケル数: 5
名前:ヴィルマ
バケット数: 2
空のバケット
バケット数: 3
空のバケット
バケット数: 4
マトリケル数: 5
名前:フレッド
バケット数: 5
空のバケット
バケット数: 6
マトリケル数: 5
名前:バーニー
バケット数: 7
空のバケット
//不要な出力 ;-)
マトリケル番号: -842150451
名前: