본문 바로가기

개발/C++

C++ Map, HashMap(unorder_map) 사용할 때 주의할 점

맵이나 해시맵을 사용할 때 그냥 [] 연산자 사용하는 경우가 많은데

 

이럴 때 주의해야 하는 점이 있음

 

#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()을 쓰면 없는 키에 접근할 때 에러를 뱉음