ユーザー定義のキー タイプを使用した STL マップを理解する
C では、STL マップは一意のキーに基づいてデータを編成するための強力なデータ構造を提供します。ただし、ユーザー定義型のマップを使用すると、コンパイル エラーが発生する可能性があります。
根本原因: 比較演算子がありません
エラー メッセージは、オーバーロードされた以下の演算子が存在しないことを強調しています。ユーザー定義クラス Class1 の than 演算子 (<)。デフォルトでは、std::map はそのキーが演算子< を使用して比較できることを期待します。これは、マップが効率的な検索と並べ替えを実行するために必要です。
カスタム コンパレータによる解決
この問題を解決するには、Class1 オブジェクトの比較ロジックを定義するカスタム コンパレータ クラスを作成します。例:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <p>ここで、Class1Compare クラスは、ID 値に基づいて Class1 オブジェクトを比較するための実装を提供します。</p> <p><strong>代替: std::less の特殊化</strong></p> <p>または、std::less テンプレートを Class1 に特化することもできますオブジェクト:</p> <pre class="brush:php;toolbar:false">namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
std::less を特殊化することで、コードの複雑さを最小限に抑えながら、Class1 オブジェクトに特定の比較ロジックを提供します。
以上がC STL マップでユーザー定義のキー タイプを使用するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。