2017-10-06 57 views
-4

創建地圖這樣的:std::map<int, std::string> mapID;地圖在C++給鑰匙,獲取字符串

輸入:的azazaz [1] =! 「串」;

我想用鍵打印元素是s。 例如

cout << "The string is : " << mapID.at(s)->second << endl; 

OR

cout << "The string is : " << mapID.find(s)->second << endl; 

但我有錯誤

error: no matching function for call to ‘std::map >::at(std::string&)’

UPDATE:

while(getline(file,s)) 
        { 
          cout<< s << endl; 
          number = atoi(s.c_str()); 

         cout << "The string is: " << mapID.at(number)<< endl; 
} 
+3

請顯示[mcve]。 '1'顯然不是一個字符串,所以有些東西是可疑的,但我們需要看到更多的代碼來重現問題 – user463035818

+0

如果mapID [1]不存在,它將在1處創建一個元素 – rak007

+1

您列出的代碼不能產生給定的錯誤信息。請向我們展示實際的代碼或實際的錯誤消息。 (最好是我們可以剪切並粘貼到(例如)cpp.sh中的[mcve]) –

回答

3

如果你看看參考文獻http://en.cppreference.com/w/cpp/container/map/at你會看到,方法「at」返回對的第二個元素。在你的情況是std :: string。

代碼應該是

cout << "The string is : " << mapID.at(1) << endl; 
+2

是真的,但它沒有解釋報告的錯誤消息 – user463035818

+0

錯誤消息解釋爲觀察方法'at()'接收一個密鑰值,所以在'std :: map '中,它可用at(int const&)',而不是'at(std :: string const&)' – max66

-1

由於C++ 11,.at()返回到與密鑰k標識的元素的映射值的引用。

你的例子很好,如果你使用迭代器,然後你可以訪問你的地圖所做的pair元素。

這裏是一個迭代

auto it = mapID.find(1); 
cout << "The string is : " << it->second << endl; 

或與.at()

cout << "The string is : " << mapID.at(1) << endl; 

但要注意的是.AT()將拋出一個例子,如果該元素是不是在你的地圖發現,因爲它可以」 t創建它像[]運營商

+1

假設OP得到錯誤信息報告,他們仍然會收到與此「修復」相同的錯誤消息。 (順便說一句同樣適用於其他「答案」)。當問題根本不清楚時,用什麼來回答問題? – user463035818

+0

@ tobi303 _「什麼是衝的點」_ FGITW,因爲它曾經是:P ... – user0042

+0

@ tobi303他調用 - >第二個在std :: string元素而不是迭代器,這是他的錯誤,我解釋它在我的回答中 – rak007