ホームページ > バックエンド開発 > C++ > std::map でポインタをキーとして正しく使用するにはどうすればよいですか?

std::map でポインタをキーとして正しく使用するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-10 17:11:14
オリジナル
661 人が閲覧しました

How Can I Use Pointers as Keys in a std::map Correctly?

std::map でキーとしてポインターを使用する

std::map でキーとしてポインターを使用する場合、ポインタではなく指定された値に基づいて比較を可能にする比較ファンクター

問題:

提供されたコード スニペットでは、std::map, int> を使用しています。 g_PlayerNames。比較ファンクターを指定しないと、マップは char ポインターを比較します。これらのポインターは、同じ null で終わる文字列を参照している場合でも、異なるメモリ位置を指す可能性があります。

解決策:

これを解決するには、char* キーが指す null で終わる文字列を比較する比較関数を使用します。以下に例を示します。

struct cmp_str {
  bool operator()(char const *a, char const *b) const {
    return std::strcmp(a, b) < 0;
  }
};

std::map<char *, int, cmp_str> g_PlayerNames;
ログイン後にコピー

この例では、cmp_str 構造体は、std::strcmp を使用してポイントされた文字列を比較する Operator() 関数を定義します。これにより、マップ キーがポインタ値ではなく文字列値に基づいて比較されるようになります。この比較ファンクターを使用すると、基になる null で終了する文字列に基づいてマップを正しく操作できます。

以上がstd::map でポインタをキーとして正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート