問題タブ [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.

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

c++ - std::map と std::set が bool をヒント付きで返さない

明らかに存在しないこの関数を効率的に実装するにはどうすればよいですか (なぜですか?):

値を効率的に (ヒント付きで) 挿入したいと同時に、値が挿入されたかどうかを示す bool が必要です (これは必須です)。

なぜそのような機能が存在しないのですか?それを効率的に行う可能性を思いつきませんでしたか?

どうもありがとう!

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

c++ - Cplusplus std::二次元配列のセット

私は C++ が初めてで、から使用する必要がありますSetSTL、概念に苦労しています。

私はこのような配列を持っていますint my_data[3]

私は(これが可能かどうかわからない)set3 ints のスペースを持つa を作成keysetたいと思います。これintは最初の列に格納されます。

カスタムソートも作りたいです。

これは私が試したものですが、成功しませんでした。

誰かが私を正しい方向に向けることができますか?

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

c++ - C++ セットに格納された構造体の値を取得する

2 つのデータ メンバー x、y を持つ Position という構造体を宣言します。これらの構造体のインスタンスを std::set に格納したいと考えています。後で正しい Position 構造体から x、y の値を取得するにはどうすればよいですか?

私が実装しようとしているのは、2D マップ内のエンティティの追跡システムです。エンティティが移動するたびに、その現在位置がセットに記録されるため、後でどこに移動したかを知ることができます。

移動するたびにこれを呼び出して、現在の位置を記録します。

そして後で、私のエンティティが移動しようとしている新しいセルが訪問されたかどうかを確認したいと思います。もしそうなら、私はエンティティに他の細胞を選んで何かをするように言います。

問題は、比較する適切なデータを持つ適切なセルを見つける方法がわからないことです。これが本当に紛らわしいと思われる場合は申し訳ありません

0 投票する
4 に答える
327 参照

c++ - std::set を std::vector にマージする

以下を検討してください。

2 つの があり、それらをソート順std::setにマージしたいと考えています。std::vector

それを行う最も効果的な方法はどれですか?

私はこのようなことをしましたが、もっと良い方法があるに違いないと思います。

これが私のコードです。より効果的な方法はありますか? 前もって感謝します。

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

performance - std::set からの合成コンテナーは、std::set 自体よりも高速ですか?

最小/最大範囲を として、または整数のセットをRangeとして受け入れる複合コンテナをいくつか作成しました。std::pairstd::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番目 に、これを効率的に実装することについてコメントがあります。より良いアプローチがあるかもしれませんか?

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

c++ - 個人的な比較関数を持つ std::set は同一の値を持つ

オブジェクトを保存したいのですがstd::setPoint3D比較関数は次のように定義されています (辞書順):

場合によってsetは、同じ点が含まれている場合があります。問題は比較機能にあると思いますが、正確には問題が見つかりません。どんな助けでも大歓迎です!

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

c++ - C++ std::sets をクラスのビルディング ブロックとして使用するには?

次を満たすデータ構造が必要です。

  • 任意の数の要素を格納します。各要素は 10 個の数値メトリックによって記述されます
  • log nメトリックのいずれかによる要素の高速 () 検索を可能にします
  • log n新しい要素の高速 () 挿入が可能
  • 素早い ( log n) 要素の削除が可能

そして、要素の構築に費用がかかると仮定しましょう。

次のプランを思いついた

  • すべての要素を DATA というベクトルに格納します。
  • std::sets10 のメトリックごとに 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 コンストラクターに渡すこともできません。DATAstd::sets

私は C++ 型システムに反対し、型システムが意図的に私を妨げている何かを達成しようとしているような気がします。(実行時にのみ構築される変数に std::set を依存させようとしています。)そして、型システムが私のやり方を好まない理由は理解していますが、これは正当な使用例だと思います。

std::set/red-black ツリーの再実装を提供せずに、上記のデータ構造/クラスを実装する方法はありますか? 私がまだ考えていないトリックがあるといいのですが。(そうです、boost には何かがあることは知っていますが、標準ライブラリに固執したいと思います。)