ホームページ > バックエンド開発 > C++ > C の std::maps でユーザー定義型をキーとして使用するにはどうすればよいですか?

C の std::maps でユーザー定義型をキーとして使用するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-22 18:14:14
オリジナル
784 人が閲覧しました

How Can I Use User-Defined Types as Keys in std::maps in C  ?

障害の克服: ユーザー定義型をキーとして std::maps を使用する

C のキーと値のペアのマッピングの領域、キーの定義にユーザー定義型が優先される状況に遭遇することは珍しいことではありません。ただし、ユーザー定義のキーを使用して std::map を利用しようとすると、コンパイル中に不可解なエラー メッセージが表示される場合があります。このエラーとその重要性を理解するために、std::maps とユーザー定義型の微妙な違いを詳しく調べてみましょう。

std::maps を使用する場合、整数などのプリミティブ型をキーとして使用することがよくあります。または文字列。プリミティブ型には、マップ内で効率的なキーの順序付けを容易にする、明確に定義された比較演算子 (<、>、== など) があります。ただし、ユーザー定義型をキーとして使用する場合は、マップが正しく機能するためにはこれらの比較演算子の実装が重要であることに注意することが重要です。ここで、あなたが遭遇したエラー メッセージが関係します。

質問に記載されているエラーは、オペレーターが存在しないことを示唆しています。

ユーザー定義の Class1 の実装。デフォルトでは、std::maps はless<>に依存します。キーを比較するためのテンプレート。未満<>内部で演算子を呼び出します

    この問題を解決するには、いくつかの実行可能な解決策があります。
  1. 演算子の実装<:
  2. 定義演算子<キー順序の比較基準を確立する Class1 内のメンバー関数。ただし、operator< を提供するかどうかは検討する価値があります。
  3. コンパレータ関数オブジェクトの使用:
演算子< を実装する代わりに、比較ロジックをカプセル化する別のコンパレータ関数オブジェクトを作成します。これにより、柔軟性とコードのモジュール性が向上します。このようなアプローチの例を次のコード スニペットに示します。
struct Class1Compare {
    bool operator() (const Class1& lhs, const Class1& rhs) const {
        return lhs.id < rhs.id;
    }
};

std::map<Class1, int, Class1Compare> c2int;<ol start="3">
<li><strong></strong></li>Specializing std::less:</ol> 比較セマンティクスが使用にとって重要ではない場合この場合、std::less テンプレートを Class1 に特化することを検討してください。このアプローチにより、比較基準を Class1 のスコープ外で定義できるようになり、コードの拡張性が高まります。<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 を正常に利用できます。 :ユーザー定義タイプをキーとして持つマップ。プロジェクトの要件と設計原則に最も合ったソリューションを選択することが重要です。

以上がC の std::maps でユーザー定義型をキーとして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート