std::map のキーとして char* を使用する
C では、char ポインター (char) を std::map のキーとして使用します。これは、char キーを使用してマップを作成しようとして予期しない動作が発生した場合に発生する可能性があります。
この問題を解決するには、デフォルトで std::map がポインター アドレスを使用してキーを比較することを理解することが重要です。それらが表す実際の文字ではありません。これにより、誤った比較や信頼性の低い動作が発生する可能性があります。
これに対処するには、マップに比較ファンクターを提供する必要があります。比較ファンクターは、キーを比較する方法を定義する関数です。 char* ポインターが指す null で終了する文字列を比較するファンクターを使用すると、マップが文字列値に基づいて要素を正しく順序付けし、取得することを保証できます。
これは、 char* キーの比較ファンクター:
struct cmp_str { bool operator()(char const *a, char const *b) const { return std::strcmp(a, b) < 0; } };
比較ファンクターを定義したら、それを 3 番目のテンプレート パラメーターとして渡すことができます。 std::マップ。これにより、マップはキーの比較にファンクターを使用するように強制されます:
map<char *, int, cmp_str> BlahBlah;
比較ファンクターを提供することで、char* キーが指す実際の文字列を比較するようにマップに指示し、正しい並べ替えと取得を保証します。文字列値に基づいて要素を抽出します。
以上がC std::map で char* をキーとして正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。