マップのコンパレータのカスタマイズ
C では、 std::map はコンパレータを使用して要素を並べ替えます。デフォルトでは、マップはキーを比較するために小なり演算子 (<) を使用します。ただし、カスタム コンパレータを提供することで、このデフォルトの動作をオーバーライドすることは可能です。
この質問では、マップのコンパレータをカスタマイズして、アルファベット順ではなく長さでキーを並べ替える方法について説明します。解決策は次のとおりです。
カスタム クラスを使用した解決策
std::map では、最大 4 つのテンプレート型引数を使用でき、3 番目の引数はコンパレータです。文字列の長さに基づいてコンパレータを実装するカスタム クラスの例を次に示します:
<code class="cpp">struct cmpByStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() < b.length(); } };
このカスタム コンパレータを使用するには、次のテンプレート引数を使用してマップを作成します:
<code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap;</p> <p><strong>コンストラクター引数を使用した解決策</strong></p> <p>または、マップのコンストラクターにコンパレーターを渡すこともできます。この構文は前の例と同等です:</p> <pre class="brush:php;toolbar:false"><code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap(cmpByStringLength());</code>
注: 長さで比較する場合、各長さの 1 つの文字列のみがキーとしてマップ内に存在できます。
以上がC でマップのコンパレータをカスタマイズしてキーを長さで並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。