2012-05-22 62 views
31

值我有一張地圖即valueMap獲取從地圖

typedef std::map<std::string, std::string>MAP; 
MAP valueMap; 
... 
//Entering data 

然後我通過參考

void function(const MAP &map) 
{ 
    std::string value = map["string"]; 
    // by doing so i am getting error. 
} 

我怎樣才能從地圖上看,這是值傳遞這個地圖功能作爲參考傳遞給函數?

+12

當張貼有關你得到一個錯誤,你應該始終在這個問題實際的錯誤。 –

+2

好的。我會照顧這個。謝謝 –

回答

53

不幸的是std::map::operator[]是一個非const成員函數,並且你有一個const引用。

你要麼需要改變的function簽名或做:

MAP::const_iterator pos = map.find("string"); 
if (pos == map.end()) { 
    //handle the error 
} else { 
    std::string value = pos->second; 
    ... 
} 

operator[]加上默認構造的地圖的價值,並返回對它的引用處理錯誤。當你擁有的只是一個const引用時,這是沒用的,所以你需要做一些不同的事情。

可以忽略的可能性,並寫string value = map.find("string")->second;,如果你的程序邏輯在某種程度上保證了"string"已經是一個關鍵。顯而易見的問題是,如果你錯了,那麼你會得到未定義的行爲。

+1

如果你的編譯器還不支持'auto',則使用'auto'的'MAP :: const_iterator' intead。 – smerlin

+0

不應該是'std :: string value = pos-> second;'或'const std :: string&value = pos-> second;'? – smerlin

+0

@smerlin:好點,固定。提問者實際是否需要一個值的副本,或者可以使用一個const引用,取決於未顯示的代碼。所以我決定不打擾它:-) –