簡體   English   中英

使用指針類型作為鍵訪問std :: map

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM