2014-02-20 60 views
0

我只是想使用標準std::map,而且我遇到了麻煩。我記得,包括頭,這裏是我的聲明:map :: find()找不到現有的密鑰

std::map<const char *, UINT> boneList; 

我在與一些數據填充它,但是當我試圖找到這樣的值:

std::cout << boneList.find("Bind_Spine1")->second; 

但是相反打印一個數字,錯誤在運行時彈出:「map/set iterator not derefernciable」。

但是,如果我這樣做:

std::cout << boneList["Bind_Spine1"]; 

一切工作就好了。爲什麼find()返回end()時operator[]不是?我正在使用visual studio 13

+0

[const char \ *在地圖查找中找不到]的可能重複(http://stackoverflow.com/questions/16310565/const-char-not-found-in-map-find) –

回答

2

如果不存在,boneList["Bind_Spine1"]會將一個項目添加到地圖中。 boneList.find("Bind_Spine1")不會那樣做。

將地圖中的密鑰更改爲std::string。這應該解決問題。當您使用char const*作爲地圖的關鍵字時,它會顯得混亂。在C/C++,如果你有

char const* ap = "abcd"; 
char const* bp = "abcd"; 

那麼它不能保證a == b。但如果您使用

std::string a = "abcd"; 
std::string b = "abcd"; 

然後保證a == b

+0

更改密鑰映射到'std :: string'。這應該解決問題。當你使用'char const *'作爲地圖的關鍵字時,它看起來都很混亂。在C/C++中,如果你有'char const * ap =「abcd」; char const * bp =「abcd」;',a!= b。但是,如果你使用'std :: string a =「abcd」; std :: string b =「abcd」;',然後a == b。 –

+0

祝福你解決了它:D:D – Soulslayer

+0

@RSahu:技術上'ap'和'bp'可能會或可能不會相等。 –