問題タブ [strict-weak-ordering]
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++ - Operator< と厳密な弱い順序付け
operator<
n タプル (たとえば 3 タプル)を定義して、厳密な弱い順序付けの概念を満たすにはどうすればよいですか? ブーストライブラリには正しく定義されたタプルクラスがあることは知っていますoperator<
が、何らかの理由で使用できません。
c++ - stl 順序付け - 厳密な弱い順序付け
STL が厳密な弱い順序付けである比較関数で機能するのはなぜですか? 部分的な順序付けができないのはなぜですか?
c++ - 'tuple'と'tie'を介して比較演算子を実装するのは良い考えですか?
(注: BoostまたはC ++ 11tuple
からtie
取得できます。)
2つの要素のみを含む小さな構造体を作成する場合、厳密な弱順序のstd::pair
ように、そのデータ型に対してすべての重要な処理が既に行われているため、を選択する傾向があります。 operator<
。
ただし、欠点は、ほとんど役に立たない変数名です。私自身がそれを作成したとしても、特に両方が同じタイプである場合、2日後に正確に何がtypedef
何であったかを思い出せません。これは、2人以上のメンバーにとってはさらに悪化します。これは、ネストが非常に悪いためです。
そのための他のオプションはfirst
second
pair
tuple
、BoostまたはC ++ 11のいずれかからですが、それは実際には見栄えがよくありません。それで、必要な比較演算子を含めて、自分で構造体を書くことに戻ります。
特に、operator<
は非常に面倒な場合があるため、次のように定義された操作に依存するだけで、この混乱全体を回避することを考えましたtuple
。
例operator<
:たとえば、strict-weak-orderingの場合:
(渡された引数から の参照をtie
作成します。)tuple
T&
編集:@DeadMGから個人的に継承するという提案tuple
は悪いものではありませんが、かなりの欠点があります:
- オペレーターが独立している場合(おそらく友達)、私は公に継承する必要があります
- キャスティングを使用すると、私の関数/演算子(
operator=
具体的には)を簡単にバイパスできます - この
tie
ソリューションを使用すると、特定のメンバーが注文に関係ない場合は除外できます
この実装には、考慮する必要のある欠点がありますか?
c++ - STL レス演算子と「無効な演算子 <」エラー
VS 10.0 で正常にコンパイルされるコードがいくつかありますが、以下の Orders マップにいくつかのアイテムを挿入した後、Microsoft デバッグ ライブラリで「無効な演算子 <」エラーが発生します。私の less 演算子は単純で、8 バイト文字列の char を char ごとに比較するだけです。なぜこのエラーが発生するのか、誰にも分かりますか?
c++ - 厳密な弱順序とstd::sort()
私はしばらくの間、次のコードを正しく実行するように試みました。問題はsort(comp)の比較関数にあります。2つのdoubleを比較しますが、場合によっては、「Debug Assertion failed!Program:retrace.exe File:c:program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ Algorithm Expression:Invalid 」というメッセージでプログラムがクラッシュします。演算子< "。プログラムがクラッシュすると、正常に実行された最後の行がソート前の行であるため、私は100%stlのソートからのものです。最初はdoubleの精度の問題だと思っていましたが、今は疑問です。ヘルプや情報をいただければ幸いです。
c++ - std::multisetで等しい要素の挿入順序を維持する
ソートされたカスタムオブジェクトのstd::multisetがあります。マルチセット内の2つの等しいオブジェクト(<演算子に基づく)には、等しくないフィールドが含まれている場合があります。その場合、マルチセット<>内のオブジェクトの挿入順序を維持する必要があります。
C ++ 11を使用している場合、これは問題ではないことはわかっていますが、現時点では問題ではありません。
私が見た別の解決策は、を使用するクラスのタイムスタンプフィールドを使用します<ctime>
が、それは1秒の解像度を提供します。同じ秒に2つの挿入がある場合、比較操作でタイムスタンプを使用できません。このプロジェクトではboost::chronoを使用していません/使用できません。
挿入順序を確実に維持するために使用できる別の方法はありますか?
c++ - 厳密な弱順序の混乱
厳密な弱順序と、operator<を定義するときの使用方法について混乱しています。私はいくつかの構造体を持っています:
std::set
空港を作りたいです。厳密な弱順序を使用するoperator<を定義する必要がありますが、それが何を意味するのか、および/またはそれをどのように行うのか正確にはわかりません。
ある空港が別の空港より「少ない」ということは意味がありません。空港が統計に基づいて等しい場合にのみ意味があります。
演算子<の定義が厳密な弱順序に従うことをどのように確認できますか?operator<
このような状況で定義することをどのように考え始めるのですか?
説明付きの例は、可能であれば素晴らしいでしょう!
c++ - C++Stlセットの動作
以下のコードを実行しようとしました。私が見つけたのは、出力に違いがあるということです。コンパレータ機能で使用される順序付けメカニズムに問題があることを理解しています。私が基本的に探しているのは次のとおりです。1)Setはどのようにデータを内部に保存しますか。2)この問題を解決するにはどうすればよいですか、またはデータを別のセットにコピーするための最良の方法です。3)注文がこの問題をどの程度正確に引き起こしているか。
c++ - std::list厳密な弱順序
std :: list :: sort関数の使用に多くの問題があります。ほとんどの場合は機能しますが、アサーション'invalidoperator<'がスローされることがあります。この問題を調べてみると、ソート関数が厳密な弱順序に従っていないことが原因であることがわかりましたが、コードを見ると、正しいように見えるので、なぜ厳密な弱い順序に従っていないのかわかりません。何が欠けているのでしょうか。ここ?
この関数の目的は、要素のリストを丘のシステムに基づいて数式文字列に並べ替えることです。カーボンファースト、水素セカンド、その他すべてアルファベット順。FormulaStructは、完全な数式の1つの要素と量を表すだけです。
編集 bHasCarbonは、式に炭素が含まれている場合の条件です。ヒルシステムでは、式に炭素が含まれている場合は水素よりも次の炭素が必要であり、そうでない場合は水素を含むすべてがアルファベット順であるため、コードの別のセクションで指定されます。