2008/07/18 - [IT 전뇌실/Effective STL 초판] -
항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자
에서 상등 관계와 동등관계를 정리해 둔것이 있었다. 연관 컨테이너(Associative Containers)에 값을 넣을 때는 그 연관 컨테이너가 어떤 연관순서로 정렬이 되는지 동등관계의 비교타입을 정의해 두어야 한다.
하지만 포인터를 넣는 연관컨테이너는 어떻게 될까?
이 경우에 포인터의 비교타입을 정해두지 않는 다면, 포인터의 동등(equibelence)관계로 정렬이 되기 때문에 원하는 정렬을 하지 못한다. 실험 코드를 준비 했다, 메모리 누수는 .. 알아서 대처 하도록
그렇다면 어떻게 해야 하는가? 역시 코드를 준비 했다. 역시 메모리 누수는 알아서 대처하도록
여기서 눈여겨 볼것은 다름 아닌, 함수를 넣는것이 아닌 객체를 넣는다는 것에 있다. 왜냐하면 연과컨테이너가 비교 타입으로 원하는것은 함수의 포인터가 아닌, 타입 그 자체이기 때문이다.(사실 타입을 원한다 했을 때는 잘 이해가 안되는데, 나 같은 경우 타입은 특정 객체를 뜻한다라고 매치시면 잘 이해가 된다.)
이렇게 하면, 원하는 순서대로 정렬이 될 것이다. 이런 포인터형을 담을때 이런 점을 주의하면 큰 문제는 없다.(메모리 해체는.. 스스로 하시길;)
여담으로
1. 템플릿을 만들어 포인터를 비교하는게 좋겠다고 책에 나와있지만, 이런 요령이 있다는 것이다. 포인터를 이렇게 할 경우, 사용자 정의 객체라면, operator < 를 반드시 정의해 두어야 한다.(책에 빠져 있길래...)
2. 책에서는 smart_ptr을 넣어, 메모리 해체에 대한 .. 부담을 덜라고 나와있다.
관련링크
http://blog.empas.com/electr/18722425
항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자
에서 상등 관계와 동등관계를 정리해 둔것이 있었다. 연관 컨테이너(Associative Containers)에 값을 넣을 때는 그 연관 컨테이너가 어떤 연관순서로 정렬이 되는지 동등관계의 비교타입을 정의해 두어야 한다.
하지만 포인터를 넣는 연관컨테이너는 어떻게 될까?
이 경우에 포인터의 비교타입을 정해두지 않는 다면, 포인터의 동등(equibelence)관계로 정렬이 되기 때문에 원하는 정렬을 하지 못한다. 실험 코드를 준비 했다, 메모리 누수는 .. 알아서 대처 하도록
그렇다면 어떻게 해야 하는가? 역시 코드를 준비 했다. 역시 메모리 누수는 알아서 대처하도록
여기서 눈여겨 볼것은 다름 아닌, 함수를 넣는것이 아닌 객체를 넣는다는 것에 있다. 왜냐하면 연과컨테이너가 비교 타입으로 원하는것은 함수의 포인터가 아닌, 타입 그 자체이기 때문이다.(사실 타입을 원한다 했을 때는 잘 이해가 안되는데, 나 같은 경우 타입은 특정 객체를 뜻한다라고 매치시면 잘 이해가 된다.)
이렇게 하면, 원하는 순서대로 정렬이 될 것이다. 이런 포인터형을 담을때 이런 점을 주의하면 큰 문제는 없다.(메모리 해체는.. 스스로 하시길;)
여담으로
1. 템플릿을 만들어 포인터를 비교하는게 좋겠다고 책에 나와있지만, 이런 요령이 있다는 것이다. 포인터를 이렇게 할 경우, 사용자 정의 객체라면, operator < 를 반드시 정의해 두어야 한다.(책에 빠져 있길래...)
2. 책에서는 smart_ptr을 넣어, 메모리 해체에 대한 .. 부담을 덜라고 나와있다.
관련링크
http://blog.empas.com/electr/18722425
'책 정리 > Effective STL' 카테고리의 다른 글
항목 25: 현재는 표준이 아니지만, 해쉬 컨테이너에 대해 충분히 대비해 두자 (0) | 2008.07.26 |
---|---|
항목 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 |
항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자 (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 |
최근댓글