プログラミングでは、ユーザー定義クラスで STL マップを使用すると、不可解なコンパイラ エラーが発生することがよくあります。具体的には、「'operator<' に一致しません」というエラー メッセージが表示されます。 in '__x < __y'" は、ユーザー定義型のキーを使用して要素にアクセスしようとする場合によく発生します。
エラー メッセージは、コンパイラがアクセスできないことを示しています。演算子 < を見つけます。ユーザー定義型の 2 つのインスタンスを比較します。これは、デフォルトでは、STL マップではキーの順序付けに比較演算子 (operator<) が必要であるためです。ただし、ユーザー定義型を使用する場合、この演算子は自動的には使用できません。
演算子を定義する代わりに
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;ユーザー定義型の場合は、コンパレータ関数オブジェクト クラスを作成できます。このクラスは、ユーザー定義型の相対的な順序を決定する、operator() の特殊バージョンを実装します。次に、このコンパレータを使用するようにマップを特殊化できます。</p> <h3></h3> <p>解決策 2: std::less の特殊化</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; } }; }
結論
STL マップとユーザー定義型を扱う場合、キーを比較するメソッドを提供することが不可欠です。これは、コンパレータ関数オブジェクトを通じて、または std::less を特殊化することによって実現できます。この要件に対処することで、開発者はユーザー定義型をキーとして持つマップを効果的に利用できるようになります。以上がC std::maps でユーザー定義型をキーとして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。