ホームページ >バックエンド開発 >C++ >C STL マップでユーザー定義のキー タイプを使用するには?

C STL マップでユーザー定義のキー タイプを使用するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-24 01:54:10484ブラウズ

How to Use User-Defined Key Types with C   STL Maps?

ユーザー定義のキー タイプを使用した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。