더북(TheBook)

연습 문제 16의 std::unordered_map 예제에서 키와 값의 쌍을 저장한 후, [] 연산자와 키를 이용하여 값을 받아올 수 있었습니다. 이 [] 연산자는 값에 대한 참조를 반환하므로 이를 이용하여 저장된 값을 변경할 수도 있습니다.

Note ≡


std::unordered_map[] 연산자는 참조를 반환하며, 만약 해당 키가 없다면 해당 위치에 기본값을 추가하여 반환합니다.

연습 문제 16에서 squareMap100을 삽입한 적이 없음에도 squareMap[100] = 0이 출력된 것을 볼 수 있습니다. 이는 [] 연산자가 실제 값이 없을 때는 기본값 0을 추가한 후 반환하기 때문입니다.

만약 현재 버킷의 개수를 알고 싶다면 bucket_count() 함수를 사용할 수 있습니다. 이외에도 load_factor(), max_bucket_count() 등의 함수를 이용하여 컨테이너 내부에서 사용되는 설정 값을 알 수 있습니다. 또한 rehash() 함수를 이용하여 수동으로 재해싱을 수행할 수 있습니다.

이들 컨테이너는 체이닝 기법을 사용하여 구현되었으므로 키와 값의 쌍을 서로 다른 버킷에 저장합니다. 그러므로 버킷에서 특정 키를 찾을 때 키가 같은지를 비교해야 합니다. 그러므로 키 타입에 대해 등호 연산이 정의되어 있어야 합니다. 또는 템플릿 매개변수로 비교자를 지정할 수 있습니다.

std::unordered_setstd::unordered_map은 중복된 키를 허용하지 않습니다. 만약 중복된 값을 저장하고 싶다면 std::unordered_multiset 또는 std::unordered_multimap을 사용해야 합니다. 이 두 컨테이너의 삽입 함수는 주어진 키가 이미 존재하는지를 검사하지 않습니다. 또한 이들 컨테이너는 특정 키에 해당하는 모든 값을 얻을 수 있는 기능도 지원합니다. 이들 컨테이너에 대한 추가적인 사항은 이 책의 범위를 벗어나므로 더 이상 다루지 않겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.