ホームページ >バックエンド開発 >C++ >C でマップのコンパレータをカスタマイズしてキーを長さで並べ替えるにはどうすればよいですか?

C でマップのコンパレータをカスタマイズしてキーを長さで並べ替えるにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 08:02:02551ブラウズ

How can I customize the comparator for a map in C   to sort keys by their length?

マップのコンパレータのカスタマイズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。