3. Associative Containers

연관 컨테이너에 대해 알아보자.

19. Understand the difference between equality and equivalence.

std::set과 std::map의 .find()는 인스턴스 생성 시에 넘겨진 비교 함수에 대해 동치인 키를 찾는다. std::find는 일치하는 키를 찾는다. 이를 유념하라.

20. Specify comparison types for associative containers of pointers.

연관 컨테이너에 포인터를 담으려면 기본 비교 함수가 아니라 그 포인터가 가리키는 오브젝트를 비교하는 함수를 명시하라.

21. Always have comparison functions return false for equal values.

비교 함수는 같은 값에 대해 무조건 false를 리턴해야 한다. 아니면 연관 컨테이너가 망가진다. 웬만하면 C++20의 operator<=>를 쓰자.

22. Avoid in-place key modification in set and multiset.

std::set이나 std::multiset의 키를 제자리에서 직접 수정하지 말라. 키의 정렬이 망가진다.

23. Consider replacing associative containers with sorted vectors.

삽입 삭제가 빈번하지 않다면 정렬 연관 컨테이너보다는 std::vector를 정렬시켜서 쓰는 것이 더 나을 수도 있다.

24. Choose carefully between map::operator[] and map::insert when efficiency is important.

새 원소를 삽입할 때는 std::map::instert를 쓰고, 존재하는 키에 대한 값을 수정할 때는 operator[]를 쓰자.

25. Familiarize yourself with the nonstandard hashed containers.

C++11 이후의 std::unordered_set, std::unordered_map에 친숙해지라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중