파이썬의 dictionary랑 동일한 개념. 대신 파이썬 dict는 object 타입으로 하는 만큼 하나의 dict에 대해서 여러 타입의 key와 val을 가질 수 있지만, C++에서는 거기까진 안된다. 선언할 때 키와 밸류의 타입을 지정해줘야 함.
map<int, int> dictionary;
map.insert({key, value)};
map.insert(pair<int,int>(key, value));
map.insert(make_pair(key, value));
map.emplace(key, value);
map[key] = value;
위 방법 모두 가능하다. insert와 emplace의 경우에는 이미 키가 존재하는 경우 아무 일도 일어나지 않는다. ”=” 연산자는 키가 없다면 삽입하고, 키가 존재한다면 값을 수정한다.
insert와 emplace는 pair를 반환하는데, 이들의 두번째 인자는 삽입 성공 여부에 대한 bool값이다. (첫번째 값은 아마 트리의 이터레이터로 추정) 즉, 키가 존재하지 않는 경우에는 삽입에 성공했다는 의미로 true, 이미 존재하는 경우에는 삽입에 실패했다는 의미로 false를 반환한다.
map<int,int> dictionary;
cout << dictionary.insert(make_pair(1,2)).second; // 1
cout << dictionary.emplace(2,3).second; // 1
cout << dictionary.insert(make_pair(1,5)).second; // 0
cout << dictionary.emplace(2,5).second; // 0
dictionary.erase(key); 키가 이미 존재하지 않는 경우에는 아무일도 일어나지 않는다. 성공 여부도 반환하지 않는다.
map.find(key) != map.end() 이걸로 키 여부를 확인할 수 있다.
정확히는 find는 키값이 존재하는 경우 해당하는 pair<iterator, bool>를 반환하는데, 키값이 없는 경우 end()와 같은 pair를 반환한다.
원리야 저렇고, 키 존재 여부 확인용 기법으로 생각하면 될 듯.