要素が 2 つだけで構成される小さな構造体に直面した場合、多くの人は事前の理由により標準ペアを選択します。厳密-弱い順序付け演算子など、定義された必需品。ただし、このアプローチでは、特に複数の要素やネストされたペアを扱う場合に、変数名が有益ではないという課題が生じます。
別の方法は、Boost または C 11 のタプルを利用することです。見た目はすっきりしていますが、比較する際には依然として複雑さが伴います。より効率的な解決策を求めて、タプル操作のみに依存してこれを回避することを検討する人もいます。
たとえば、指定された引数から T&A 参照のタプルを形成するネクタイを使用して、厳密-弱い順序付け演算子を作成できます。 :
bool operator<(MyStruct const& lhs, MyStruct const& rhs){ return std::tie(lhs.one_member, lhs.another, lhs.yet_more) < std::tie(rhs.one_member, rhs.another, rhs.yet_more); }
この洗練されたアプローチにより、比較操作が簡単になります。ただし、欠点を考慮することが依然として重要です。 1 つの懸念は、オペレーターが独立している場合や友人である場合であり、その場合はパブリック継承が必要になる可能性があります。これにより、関数または演算子 (特に、operator=) がバイパスされる可能性がある脆弱性が発生する可能性があります。さらに、タイにより順序付けに無関係なメンバーが除外される可能性があり、複雑な問題が発生する可能性があります。
最終的に、このアプローチを使用するかどうかは、パフォーマンスへの影響に基づいて決定する必要があります。確かに演算子コードは簡素化されますが、プロファイリングによって時間のかかる比較操作が示される場合には懸念が生じます。そうしないと、メンテナンスの容易さが潜在的な欠点を上回る可能性があります。
以上がC でのタプル比較に `std::tie` を使用するのは賢明なアプローチですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。