マップ キー比較用のコンパレータのカスタマイズ
マップを操作する場合、キー コンパレータの選択はコレクションの動作に大きな影響を与える可能性があります。 STL マップでは、デフォルトのコンパレータは自然な順序に基づいてキーを比較します。ただし、このデフォルトをオーバーライドして、キーの比較にカスタム コンパレータを指定することは可能です。
カスタム コンパレータの作成
カスタム コンパレータを定義するには、クラスまたは構造体を作成します。これは、operator() 関数を実装します。この関数は、比較するキーを表す 2 つの引数を受け取り、比較結果を示すブール値を返します。たとえば、文字列の長さでキーを比較するには、次のコンパレータを作成できます。
<code class="cpp">struct cmpByStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() < b.length(); } };
マップでのカスタム コンパレータの使用
カスタム コンパレータを作成したらこれを 3 番目のテンプレート引数として渡すことでマップを初期化するために使用できます:
<code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap;</code>
あるいは、コンパレータをマップのコンストラクターに渡すこともできます:
<code class="cpp">std::map<std::string, std::string> myMap(std::less<std::string>(), cmpByStringLength());</code>
その他の並べ替えオプション
カスタム コンパレータを使用すると柔軟性が得られますが、長さに基づいてカスタム コンパレータを使用すると、同じ長さの複数のキーを使用できる機能が制限される可能性があることに注意してください。より複雑な並べ替えメカニズムが必要な場合は、Boost.MultiIndex などの代替データ構造や外部並べ替えライブラリの使用を検討してください。
以上がSTL マップのキー比較をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。