항목 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
어떻게 이해하는게 좋을까 고민하다가 한가지 묘안이 떠올랐다. 예로써 감을 잡는 방법을 쓴다.
연관컨테이너에서의
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
'책 정리 > Effective STL' 카테고리의 다른 글
항목 24: map::operator[]나 map::insert는 효율 문제에 주의하여 선택하자 (5) | 2008.07.26 |
---|---|
항목 23 : 연관 컨테이너 대신에 정렬된 vector를 쓰는 것이 좋을 때가 있다. (0) | 2008.07.22 |
항목 22 : set과 multiset에 저장된 데이터 요소에 대해 키(key)를 바꾸는 일은 피하자. (1) | 2008.07.19 |
항목 21 : 연관 컨테이너용 비교 함수는 같은 값에 대해 false를 반환해야 한다. (0) | 2008.07.19 |
항목 20 : 포인터를 저장하는 연관 컨테이너에 대해서는 적합한 비교(비교함수) 타입을 정해주자 (0) | 2008.07.18 |
항목 18 : vector<bool> 보기를 돌 같이 하자. (0) | 2008.07.17 |
항목 17 : 쓸데없이 남은 용량은 "바꿔치기(swap) 묘수"를 써서 없애 버리자. (0) | 2008.07.17 |
항목 16 : 기존의 C API에 vector와 string을 넘기는 방법을 알아두자 (0) | 2008.07.17 |
항목 15 : 잊지 말자! string은 여러 가지 방식으로 구현되어 있다는 사실을... (0) | 2008.07.16 |
항목 14 : reserve는 필요 없이 메모리가 재할당되는 것을 막아 준다. (1) | 2008.07.16 |
최근댓글