강의로 돌아가기
Eunho Lee

unorder_map 의 기본값

include

include

include

using namespace std;

string solution(vector participant, vector completion){
string answer = "";
unordered_map d;

for(auto& i: participant) d[i]++;
for(auto& i: completion) d[i]--;
for(auto& i: d){
if(i.second > 0){
answer = i.first;
break;
}
}

return answer;

  1. 여기서 if(i.second>0) 조건에서 왜 i.second 대신 d[i]는 사용할수 없는건가요?? i가 key값이고, d[i]가 이에 대응하는 value값이라고 생각해서 d[i]도 가능하다고 생각했는데, 안되는군요.

  2. unordered_map Container를 이용하여 d 컨테이너를 선언했을 때, 별도로 사이즈나 값 지정 필요없이 사용하면 되는건가요?? 그리고 d 에서의 각 key에 대한 디폴트 value는 0인가요?

  • Eunho Lee
    1번에서 정확히 저 i가 어떤걸 의미하는지요? Eunho Lee 2019.04.12 17:28
1 개의 답변
이시윤
  1. 위에서 for (auto& i : d) 에 의해서, iunordered_map 에 대한 iterator 의 reference 입니다. C++ STL 에서 unordered_map 에 대한 iterator 는 pair 입니다. i 가 key 값일 거라고 하신 걸 보니 Python 에서 dict 에 대한 for 순환문처럼 생각하신 게 아닐까요? 여기에서는 그렇지 않습니다. 타입이 맞지 않아서 d[i] 는 컴파일 타임 에러를 발생시킵니다.

  2. 별도로 크기를 지정하지 않아도 됩니다. 만약 입력 데이터에 대한 사전 정보가 있어서 컨테이너의 디폴트 크기를 지정할 수 있다면 (key, value) 쌍을 저장하기 위한 해시 함수의 파라미터와 연관된 설정이 가능하지만, 여기에서는 그렇게까지 할 필요도 없고 학생의 수 의 범위만 알고 있지 어느 정도 수가 주어질지를 예상하지 못하기 때문에 할 방법도 별로 없습니다. (한 가지 할 수 있을 만한 것은 최대 학생 수 예상치를 이용하는 것이겠습니다만?) 그리고, 각 key 에 대한 default value 는 map 되는 객체 의 타입의 기본 값을 따릅니다. 여기에서는 unordered_map<string, int> 를 이용하기 때문에 int 형의 기본 값인 0 이 됩니다.

  • Eunho Lee
    고맙습니다 이해가 가는군요. 파이썬으로 기초 강의를 듣다보니 잠깐 헷갈렸네요 Eunho Lee 2019.04.13 12:55
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.