首頁 >後端開發 >C++ >如何正確使用指標作為 std::map 中的鍵?

如何正確使用指標作為 std::map 中的鍵?

Barbara Streisand
Barbara Streisand原創
2024-12-10 17:11:14675瀏覽

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() 函式。這確保了映射鍵是根據其字串值而不是指標值進行比較的。透過使用此比較函子,您可以根據底層空終止字串正確操作映射。

以上是如何正確使用指標作為 std::map 中的鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn