障害の克服: ユーザー定義型をキーとして std::maps を使用する
C のキーと値のペアのマッピングの領域、キーの定義にユーザー定義型が優先される状況に遭遇することは珍しいことではありません。ただし、ユーザー定義のキーを使用して std::map を利用しようとすると、コンパイル中に不可解なエラー メッセージが表示される場合があります。このエラーとその重要性を理解するために、std::maps とユーザー定義型の微妙な違いを詳しく調べてみましょう。
std::maps を使用する場合、整数などのプリミティブ型をキーとして使用することがよくあります。または文字列。プリミティブ型には、マップ内で効率的なキーの順序付けを容易にする、明確に定義された比較演算子 (<、>、== など) があります。ただし、ユーザー定義型をキーとして使用する場合は、マップが正しく機能するためにはこれらの比較演算子の実装が重要であることに注意することが重要です。ここで、あなたが遭遇したエラー メッセージが関係します。
質問に記載されているエラーは、オペレーターが存在しないことを示唆しています。
ユーザー定義の Class1 の実装。デフォルトでは、std::maps はless<>に依存します。キーを比較するためのテンプレート。未満<>内部で演算子を呼び出します
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 サイトの他の関連記事を参照してください。