問題タブ [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 :: set)に置き換えたため、最短の解決策になりましたパスがより速く見つかります。(ダイクストラアルゴリズムはどういうわけか近い)
ここで、ノード番号をヒープに挿入します。これにより、デフォルトのstd :: setは、コストではなく番号を使用してノードを並べ替えます。すべてが順調であり、アルゴリズムは正しい答えを与えます。
std :: setのカスタム比較関数を実装すると、ノードは番号ではなく距離で並べ替えられ、アルゴリズムは残りのノードまでの最短距離を提供しなくなります。
これは私の比較関数です:
したがって、BFアルゴリズムであるため、アルゴリズムは改善ができなくなるまで実行されます。比較関数はどういうわけかstd::setを「混乱」させることができますか?これが、この比較関数を追加すると間違った答えが得られる理由がわかる唯一の理由です...
つまり、ノードが完全にランダムな順序である場合は機能するのに、コスト順に並べられている場合は機能しないのはなぜですか...
c++ - std :: setweird<オーバーロードエラー
だから、私はこのコードを持っています:
次の理由でコンパイルできません:
しかし、私は演算子<をオーバーロードしておらず、これが何を意味するのか理解できません。
ありがとう、
ジュリアン。
c++ - 挿入失敗の検出を設定
挿入されるアイテムがすでにセットに存在するためにセット挿入が発生しないことを検出する簡単な方法はありますか?たとえば、挿入の失敗を示すメッセージをユーザーに表示して、データ内の重複をより簡単に見つけて削除できるようにしたいと思います。これが私がやりたいことを示すためのいくつかの擬似コードです:
c++ - ペア要素のC++セット検索?
だから私はのセットを持っていますpairs<string ,string>
そしてfind()
、ペアの「最初」にある単一の文字列を検索するために使用したいのですが、最初にその文字列を見つけた場合は、その関数から2番目に戻りたいと思います。
私の現在の試みは..
c++ - Qtコンテナ-どちらを選択すればよいですか?
Qt
STL
のようなコンテナのセットを提供します。
ただし、使用可能なコンテナはありません。このコンテナは、順序付けられた値を順序(のようにstd::set
)で格納しQSet
、何らかの理由でのように動作しstd::unordered_set
ます。と呼ばれる「セット」データ構造でのルックアップはおそらくO(1)
素晴らしいことだと思いますが、なぜこの決定がなされたのかは確かに理解できません。
注文したアイテムのコレクションを保存するためにどのコンテナを使用する必要がありますか(QMap
架空の値を使用するのは非常に悪い選択だと思います)、なぜQt
そのようなものを提供しないのstd::set
ですか?
これには技術的な理由があるのではないかと思いますが、残念ながら考えられません。
algorithm - std::mapをc++のstd::setにコピーします
STLアルゴリズムを使用して、std::map値をstd::setにディープコピーすることは可能ですか?
新しいセットに明示的に挿入したくありません。
私はこれを明示的にしたくありません:
しかし、価値観の深いコピーを使用して、これを行うためのより簡潔でエレガントな方法を見つけてください。
c++ - 一連の数字でstd::setを効率的に初期化します
明らかな(ナイーブ?)アプローチは次のようになります。
これはかなり読みやすいですが、私が理解していることから、挿入位置を繰り返し検索する必要があり、入力シーケンスがすでにソートされているという事実を利用していないため、最適ではありません。
std::set
数列で初期化するよりエレガントで効率的な(または事実上の)方法はありますか?
または、より一般的には、エントリの順序付きリストをコレクションに効率的に挿入するにはどうすればよいですか?
アップデート:
ドキュメントを見ると、挿入の位置を示すイテレータを受け入れるコンストラクタに気づきました。
これは、これがより効率的であることを意味します。
それは合理的に見えますが、私はまだより多くの提案を受け入れています。
c++ - C ++ std::set関数のオーバーロードの検索==演算子
セットを使用しています。キーとしてカスタム構造体を使用します。値を挿入して、挿入された値を見つけようとしています。しかし、それは要素を見つけることは決してないようです。
==演算子と<演算子の両方をオーバーライドしました。
構造のコードは次のとおりです。
そしてこれはメインのコードです
常にassertステートメントで失敗します。私は何が間違っているのですか?
編集-わかりました。==演算子をまったく使用していないことを理解しました。これが私が欲しいものです。データ構造を距離順に並べる必要があります。しかし、IDを使用して削除できるはずです。これを行うためのクリーンな方法または既存のデータ構造はありますか?
c++ - set_differenceアルゴリズムの使用に間違いが見つかりません
私が得た:
「object.h」
「object.cpp」
オブジェクトで動作する関数を取得しました。
問題の説明:
実装operator<
しoperator==
、2つのインスタンスの比較を実行しましたm_number
が、同じ要素を設定detectedObjects
して含む場合、期待どおりに空の結果セットではなくすべての要素を返します。trackedObjects
m_number
std::set_difference
compare
テンプレート引数としてセットに機能オブジェクトを与えようとさえしましたが、その結果、適切に定義されていないこと=
について多くのコンパイラエラーが発生しました。!=
何が問題なのかしら?
c++ - アルゴリズムを使用して元の順序を維持しながら、ソートされていないstd :: vectorから重複を削除するにはどうすればよいですか?
各整数の最初の出現順序を維持しながら、重複を削除する必要がある整数の配列があります。私はそれをこのように行うことを見ることができますが、STLアルゴリズムをよりよく利用するより良い方法があると想像しますか?挿入は自分の手に負えないので、挿入する前に重複をチェックできません。
STLアルゴリズムを使用してこれをどのように行うことができますか?