![](/img/trans.png)
[英]Accessing std::map with custom struct as key type causes strange behaviour
[英]Accessing a std::map with pointer type as key
我正在嘗試使用一個字符串作為std :: map的鍵,因為可以從程序的不同部分更改該字符串,但是遇到一個問題,我可以輕松地將數據存儲在映射中,但是我無法訪問它,因為它要求將指針地址作為鍵,而我想從字符串的值訪問該數據。
這是代碼
using namespace std;
string *AString = "pointer";
map<string *, bool> AMap; //Declare
AMap[AString] = true; //Insert into map with key AString
cerr << AMap["pointer"]; //Does not work
解決方案是不使用指針:
using namespace std;
string AString = "pointer";
map<string, bool> AMap;
AMap[AString] = true;
cerr << AMap["pointer"];
您確實不希望在地圖中的程序其他部分更改地圖鍵。 這只是自找麻煩,並指示設計問題。
“指針”是AString指針指向內存中的C字符串。 您需要做:
cerr << AMap[AString];
您還可以使用一個std::map<std::string,bool>
,它不易出錯,而且可能意味着要執行的操作。 您真的要使用指針作為鍵嗎? 例如,創建另一個指向值“ pointer”的字符串的指針將不是相同的鍵。
std::string *BString(new std::string("pointer"));
AMap[BString] = true; //Not the same key
看起來您可能來自Java或C#?
std::string aString = "Not a Pointer";
std::map<std::string, bool> aMap;
aMap[aString] = true;
std::cerr << aMap["pointer"];
在這種情況下,您不應使用指向字符串的指針。 只需使用字符串映射而不是字符串指針映射即可。
在這種情況下, std::cerr << aMap["pointer"];
之所以起作用,是因為"pointer"
被轉換為std::string
,然后在該映射圖中由字符串值查找。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.