2008.07.18 01:57 책 정리/Effective STL
항목 19부터는 STL 연관 컨테이너(Associative Containers)에 대한 이야기이다.

어떻게 이해하는게 좋을까 고민하다가 한가지 묘안이 떠올랐다. 예로써 감을 잡는 방법을 쓴다.

연관컨테이너에서의
1. 상등(equality)은 "값이 같은가?" 이고, 동등(equivalence)는 "위치가 같은가?" 로 풀이가 된다.
2. 상등은(equality) operator== 으로 판별하고 동등(equivalence)은 operator< 으로 판별한다. >
3. 말로 하자면, 상등한 값이냐?, 동등한 위치냐?
4. 상등(equality)은 "같다, 틀리다" 로 표현되고, 동등(equivalence)은 "크냐? 작냐?" 로 표현된다.


이 정도로 이야기를 하면 어느정도 이해가 될 것이다. 이게 왜 중요하냐면, 연관컨테이너에 값을 넣을 때는 동등(equivalence) 관계로 넣고,  찾을때는 상등(equality) 관계로 찾기 때문이다.


만약 값을 넣을 때 동등(equivalence) 관계로 값을 넣기 때문에,
기존 컨테이너 값들 중 새로 넣는 값이 크거나 작거나 하지 않는다면 들어가지 못한다.
예를 들자면 컨테이너에 1,4,5,6 이 있고, 3을 넣게 되면, 1보다 크고 4보다 작기 때문에, 값이 들어간다.
하지만 4를 넣게 되면, 1보다 작지만 4보다 작은게 아니기 때문에, 값은 들어가지 못한다.

만약 값을 찾을 때 상등(equality) 관계로 찾기 때문에
기존 컨테이너 값들 같은게 없다면, 찾아내지 못한다.
예를 들자면, 컨테이너에 1,4,5,6 이 있고, 3을 찾게 되면, 못찾게 된다.
하지만 컨테이너에 4를 찾게 된다면, 4와 같은게 있기 때문에 찾을수 있게 된다.


코드를 통해 이 말을 보다 자세하게 표현하자면



왜 이렇게 구분을 지어 놨을 까?
.. 정렬을 하기 위해선 반드시 큰지 작은지를 판별할게 있어야 되고, 찾기 위해선 특정 값만을 찾아야 하기에 같은지 판별해야 하기 때문이다.


관련링크
http://jeddli.tistory.com/관련링크
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/STL_Association
http://blog.empas.com/electr/tb/18722425
http://blog.empas.com/electr/18722439
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요