맵이나 해시맵을 사용할 때 그냥 [] 연산자 사용하는 경우가 많은데
이럴 때 주의해야 하는 점이 있음
#include "pch.h"
#include <iostream>
#include <map>
#include <unordered_map>
int main()
{
std::cout << "-------map-------" << std::endl;
std::map<int, int> map;
map[1] = 100;
int a = map[1];
std::cout << "size : " << map.size() << std::endl;
std::cout << "a : " << a << std::endl;
a = map[0];
std::cout << "size : " << map.size() << std::endl;
std::cout << "a : " << a << std::endl;
std::cout << "--unordered_map--" << std::endl;
std::unordered_map<int, int> u_map;
u_map[1] = 1000;
a = u_map[1];
std::cout << "size : " << u_map.size() << std::endl;
std::cout << "a : " << a << std::endl;
a = u_map[0];
std::cout << "size : " << u_map.size() << std::endl;
std::cout << "a : " << a << std::endl;
}
결과
키 1에 값을 넣는 건 문제가 없는데
a에 키값 0으로 가져오는 게 문제가 있음
0으로 넣은 적이 없는데 0으로 가져오면 사이즈가 증가되고 0이 들어있음
맵이나 해시맵에 없는 키로 접근을 하면 기본값을 넣고 생성해버림
map.at()을 쓰면 없는 키에 접근할 때 에러를 뱉음
'개발 > C++' 카테고리의 다른 글
컴파일러 최적화 (0) | 2019.05.13 |
---|---|
C++ 스마트 포인터 (0) | 2019.05.07 |
C++ 가상 소멸자 (feat. 상속 생성자 소멸자 호출순서) (0) | 2019.04.22 |
C++ 소켓 에코 채팅 구현하기 (0) | 2019.04.15 |
C++ HashMap 구현해보기 (unorder_map) (0) | 2019.03.03 |