問題タブ [stdset]
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++ - std::map と std::set が bool をヒント付きで返さない
明らかに存在しないこの関数を効率的に実装するにはどうすればよいですか (なぜですか?):
値を効率的に (ヒント付きで) 挿入したいと同時に、値が挿入されたかどうかを示す bool が必要です (これは必須です)。
なぜそのような機能が存在しないのですか?それを効率的に行う可能性を思いつきませんでしたか?
どうもありがとう!
c++ - Cplusplus std::二次元配列のセット
私は C++ が初めてで、から使用する必要がありますSet
がSTL
、概念に苦労しています。
私はこのような配列を持っていますint my_data[3]
私は(これが可能かどうかわからない)set
3 ints のスペースを持つa を作成key
しset
たいと思います。これint
は最初の列に格納されます。
カスタムソートも作りたいです。
これは私が試したものですが、成功しませんでした。
誰かが私を正しい方向に向けることができますか?
c++ - C++ セットに格納された構造体の値を取得する
2 つのデータ メンバー x、y を持つ Position という構造体を宣言します。これらの構造体のインスタンスを std::set に格納したいと考えています。後で正しい Position 構造体から x、y の値を取得するにはどうすればよいですか?
私が実装しようとしているのは、2D マップ内のエンティティの追跡システムです。エンティティが移動するたびに、その現在位置がセットに記録されるため、後でどこに移動したかを知ることができます。
移動するたびにこれを呼び出して、現在の位置を記録します。
そして後で、私のエンティティが移動しようとしている新しいセルが訪問されたかどうかを確認したいと思います。もしそうなら、私はエンティティに他の細胞を選んで何かをするように言います。
問題は、比較する適切なデータを持つ適切なセルを見つける方法がわからないことです。これが本当に紛らわしいと思われる場合は申し訳ありません
c++ - std::set を std::vector にマージする
以下を検討してください。
2 つの があり、それらをソート順std::set
にマージしたいと考えています。std::vector
それを行う最も効果的な方法はどれですか?
私はこのようなことをしましたが、もっと良い方法があるに違いないと思います。
これが私のコードです。より効果的な方法はありますか? 前もって感謝します。
performance - std::set からの合成コンテナーは、std::set 自体よりも高速ですか?
最小/最大範囲を として、または整数のセットをRange
として受け入れる複合コンテナをいくつか作成しました。std::pair
std::set
内部的には、入力のコピーを次のように保存しますvoid *
このコンテナーはサポートしてiterators
おり、set を反復処理する場合と比較して、このコンテナーがどれほど高速であるかに興味がありましたstd::set
。
次のポリシーを使用して、テストのすべての反復ループを記述するようにしました。
- ポストインクリメントなし (遅い)
- コンパイラがループを完全に最適化できないことを確認してください
- 同じものを比較する
私は次のタイミングを持っています: パフォーマンステスト
速度テスト
範囲の実行時間: [ペア]: 13.0522 ミリ秒
範囲の実行時間: [セット]: 272.54 ミリ秒
std::set の実行時間: 438.239 ミリ秒
範囲の実行時間: 通常 ループの場合: 0.000175 ミリ秒
最初
に私は驚きました、そしてあなたも願っています. なぜ私のRange
コンテナは、 のイテレータRange
が bot のイテレータstd::pair
(単純に整数)std::set
と そして、私の実装は、Range::iterator
実際にはすべての演算子を std::set に転送しRange
ますstd::set
。
2番目 に、これを効率的に実装することについてコメントがあります。より良いアプローチがあるかもしれませんか?
c++ - 個人的な比較関数を持つ std::set は同一の値を持つ
オブジェクトを保存したいのですがstd::set
、Point3D
比較関数は次のように定義されています (辞書順):
場合によってset
は、同じ点が含まれている場合があります。問題は比較機能にあると思いますが、正確には問題が見つかりません。どんな助けでも大歓迎です!
c++ - C++ std::sets をクラスのビルディング ブロックとして使用するには?
次を満たすデータ構造が必要です。
- 任意の数の要素を格納します。各要素は 10 個の数値メトリックによって記述されます
log n
メトリックのいずれかによる要素の高速 () 検索を可能にしますlog n
新しい要素の高速 () 挿入が可能- 素早い (
log n
) 要素の削除が可能
そして、要素の構築に費用がかかると仮定しましょう。
次のプランを思いついた
- すべての要素を DATA というベクトルに格納します。
std::sets
10 のメトリックごとに 1 つずつ、 10 を使用します。それぞれstd:set
軽量で、 vector へのインデックスである整数のみが含まれますDATA
。比較演算子は、DATA 内の適切な要素を「検索」し、適切なメトリックを選択します。
要素が変更されたり、ベクターから削除されたりすることはありません。新しい要素が DATA にプッシュ バックされ、そのインデックス ( DATA.size()-1
) がセット ( ) に挿入されますset<int, Cmp<..> >
。要素を削除するには、削除されたことを示すフラグを要素に設定し (実際にはDATA
ベクトルから削除せずに)、10 個すべての std::set から要素インデックスを削除します。
DATA
これは、グローバル変数である限り正常に機能します。(また、テンプレート化された構造体 Cmp をグローバル変数に依存させることで、型システムを悪用しています。)
ただし、DATA
ベクトルと std::set の ( ) をクラス内に囲み、それらでset<int, Cmp<...> >
「インデックス」することはできませんでした。まず、外部クラス内で定義された比較演算子 Cmp は、外部クラスのフィールドにアクセスできません (したがって、DATA を評価できません)。Cmp は std::set によって構築されており、std::set は引数を持たないコンストラクターとの比較演算子を想定しているため、ベクトルを Cmp コンストラクターに渡すこともできません。DATA
std::sets
私は C++ 型システムに反対し、型システムが意図的に私を妨げている何かを達成しようとしているような気がします。(実行時にのみ構築される変数に std::set を依存させようとしています。)そして、型システムが私のやり方を好まない理由は理解していますが、これは正当な使用例だと思います。
std::set/red-black ツリーの再実装を提供せずに、上記のデータ構造/クラスを実装する方法はありますか? 私がまだ考えていないトリックがあるといいのですが。(そうです、boost には何かがあることは知っていますが、標準ライブラリに固執したいと思います。)