問題タブ [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++ - C++ の std::set のカスタム比較演算子とカスタム クラス
クラスのオブジェクトを含むセットを作成したいので、カスタム比較を決定する必要があります。残念ながら、私が試したことはすべてうまくいきませんでした。
Ant 次に、compare 構造体:
どうすればこれを機能させることができますか?
現在、問題はその識別子aを表示し、b宣言されていません。
c++ - 多数の一意の要素を効率的に処理する (std::set と他のコンテナー)
私は、要素として多数の一意のオブジェクトを持つ std::set を持っています。
プログラムのメインスレッドで:
- セットからいくつかのオブジェクトを取得します
- 処理するデータをそれぞれに割り当てます
- これらのオブジェクトをセットから削除します
- 最後に、オブジェクトをスレッドプール内のスレッドに渡して処理します
- これらのスレッドは、オブジェクトの処理を完了すると、それらをセットに戻します。(次の反復で、メイン スレッドが再びデータの次のバッチをそれらのオブジェクトに割り当てて処理できるようにするため)
この配置は完璧に機能します。しかし、オブジェクトをセットに戻すときにエラーが発生した場合 (たとえば、std::set.insert()throws bad_alloc)、すべてがトスになります。そのエラーを無視して先に進むと、オブジェクトが処理セットに戻る方法がなくなり、プログラム フローから永久に除外され、メモリ リークが発生します。
この問題に対処するために、オブジェクトをセットから削除しないようにしました。代わりに、オブジェクトが「処理中」であることを示すメンバー フラグを設定します。しかし、その場合の問題は、セットのすべての要素を繰り返し処理しているときに、メインスレッドが「処理中」のオブジェクトに何度も遭遇することです。また、パフォーマンスが大幅に低下します (セット内のオブジェクトの数が非常に多い)。
ここでより良い代替手段は何ですか?
std::listの代わりに使用できますstd::setか?bad_allocリストに要素を追加するときにポインタを割り当てるだけでよいため、要素を追加し直すときにリストに問題はありません。しかし、リスト要素を一意にするにはどうすればよいでしょうか? それを達成した場合、std::set として効率的でしょうか?要素を削除して std::set に追加し直す代わりに、要素をセットの最初または最後に移動する方法はありますか? 未処理のオブジェクトと処理済みのオブジェクトがセットの最初と最後に向かって一緒に蓄積されるようにします。
他の解決策はありますか?
c++ - set のオーバーロード演算子
特定のアルゴリズムを実装するために std::set を使用しています。セットには重複があったため、オペレーターをオーバーロードする必要があったと思います。オーバーロードはこんな感じ。
std::set で必要な < 演算子を使用できるようにオーバーロードしました。この関数は、v0 < v1 からある程度の余裕がある場合に true を返します。重複は削除されますが、セット内の有効な値も削除されます。私のセットには12個のVec3fsが必要であることを知っています。重複すると、24 個の Vec3fs があります。私の比較関数では、Vec3f は 3 つしかありません。絶対差を使用することを検討しましたが、それは厳密な弱い順序付け基準に違反しています。私の質問は次のとおりです。重複を削除して一意のアイテムのみを保持する比較関数を作成するにはどうすればよいですか?
c++ - セットと両端キューに挿入するにはどうすればよいですか
連続した整数の範囲をセットに挿入し、デキューの最後にあるセットの新しい要素ごとに、反復と同じ順序で挿入する必要がある C++ 関数があります。以下は、それぞれが O(log(n)) である挿入が繰り返されるため、およそ O(log(n) * n) であるソリューションです。O(n) ソリューションを取得したいと思います。ヒントの反復位置を取る set::insert() を使用したいのですが、そうすると、アイテムが既にセットに含まれているかどうかを一定時間で判断する方法がわかりません。
これを O(n) にリファクタリングし、関数の引数を変更せずに同じ作業を行う方法はありますか? イテレータのヒントを挿入し、アイテムが挿入されたかどうかを知る方法はありますか?
c++ - 並べ替えと一意性のための異なる述語を使用して、並べ替えられた一意の値を格納するための C++ コンテナー
2 つのフィールド (たとえば、A と B) を持つレコードがあります。As が等しい場合、レコードの 2 つのインスタンスは等しいと見なされます。一方、レコード インスタンスのコレクションは、B フィールドでソートする必要があります。
ソート用と一意性用の 2 つの異なる述語で定義できる std::set のようなコンテナはありますか? いいえの場合、どのように回避できますか?
よろしく、