2017-10-06 5 views
-4

내가 이 맵이 같은 만든이 : std::map<int, std::string> mapID;지도 문자열에게 열쇠를주고받을 ++

INPUT :의 mapId [1] = "! 문자열";

키를 사용하여 요소를 인쇄하고 싶습니다. 예를

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

또는

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

나열된 코드는 주어진 코드를 생성 할 수 없습니다 에러 메시지. 실제 코드 또는 실제 오류 메시지를 알려주십시오. (바람직하게는 [mcve]와 같이 잘라내어 cpp.sh와 같이 붙일 수 있습니다.) –

답변

3

http://en.cppreference.com/w/cpp/container/map/at 참조를 보면 "at"메서드는 쌍의 두 번째 요소를 반환합니다. 귀하의 경우 그것은 std :: string입니다. C++ 11, .at() 키 K 식별 요소의 대응 값에 대한 참조를 반환

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

사실,보고 된 오류 메시지는 설명하지 않습니다 – user463035818

+0

오류 메시지는 'at()'메소드가 그래서 st (std :: string const)가 아닌'at (int const &)'가 가능하다. – max66

-1

때문에

코드가 있어야한다.

지도에서 작성한 쌍 요소에 액세스 할 수있을 때 반복기를 사용하면 예제가 유용합니다. '그것은이 할 수있는 요소가지도에서 발견되지 않는 경우 여기

가 발생합니다 반복자

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

또는 .at()

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

그러나 .at을 (조심와)과 예입니다 [] 연산자를 만들려면

+1

OP가 에러 메시지를 받았다고 가정 할 때, 그들은 std :: map 보고서, 그들은 여전히 ​​"수정"이 같은 오류 메시지가 나타납니다. (btw는 다른 "답변"에도 동일하게 적용됩니다). 질문은 전혀 명확하지 않을 때 답변으로 쇄도의 요점은 뭐죠 ?? – user463035818

+0

@ tobi303 _ "서두르는 것의 요지"_ FGITW : P ... – user0042

+0

@ tobi303 그는 반복기 대신 std :: string 요소에서 두 번째로 호출했습니다. 즉, 반복기가 아닌 실수 였으므로 설명합니다. 내 대답 – rak007