전에 알고리즘 스터디를 할 때 map의 키 존재 여부를 0으로 확인하는 것이 안전한지, 컴파일러에 따라 다른 것은 아닌지에 대해 의논했던 적이 있다.
위 쓰레드에 따르면 map의 [] 연산자는 키가 존재하지 않을 경우 value_type(std::move(x), T())을 통해 값을 삽입한다.
T()는 void를 제외한 모든 타입에 대해 값 초기화를 진행하는데, 이때 기본(Primitive) 자료형에 대한 값 초기화는 항상 0임을 보장한다.
그러므로, map에서 map.find()나 map.count()를 통해 키 존재 여부를 확인할 필요 없이 단순히 값이 0이나 NULL인지 확인하는 것은 안전하다고 한다.
(단, 0이나 NULL을 의도적으로 삽입하는 경우에는 주의해야 한다.)
'자료구조 & 알고리즘 > 고찰' 카테고리의 다른 글
약수의 개수를 구하는 알고리즘 수행 시간 비교 (0) | 2023.02.25 |
---|---|
자료구조에 따른 insert()의 인자 (0) | 2023.02.07 |