결론부터 말하는게 더 의미전달이 잘 될것 같아, 시작부터 말한다.
"왜냐하면, 연관 컨테이너(Associative Containers)의 연관 자체가 무너지기 때문이다"
바꾸어 말하면, 연관 컨테이너(Associative Containers)로써의 가치가 없어진다는 것이며, 컨테이너의 자료들을 신용할수 없다 는것을 의미한다.
그래서 C++ 표준화 위원회에서 연관 컨테이너(Associative Containers)의 요소를 정렬할때 쓰는 비교함수는 같은 값에 대해서 false를 리턴하도록 규정하였다.(즉, 비교함수가 객체를 비교할때 strict weak ordering 을 정의해야 한다. 관련 주소 http://en.wikipedia.org/wiki/Strict_weak_ordering : 요즘 들어 점점 영어의 벽이 보이기 시작한다.)
무너진다는 표현에 대해서 어떻게 무너지는지에 대한 소개와 코드를 달아둔다.
1. 무너진다는 것은 신용할수 없다라고 이해해도 좋다. 같은 값 2개를 컨테이너에 밀어 넣고(insert), 다시 빼와서(find) 확인하고자 할때, 두개 중 무엇이 나올지 예측할수가 없다.(multiset, multimap 도 마찬가지다.)
코드를 통해 알아보자.
.. 사실 정확한 실험은 되지 못했다; MSVC2005에서의 STL set은 비교함수가 .. <= 로 되어 있으면 런타임에러를 리턴해준다(고맙데..).무시하면 되지만 .. 값이 들어가는 것까지만 봐도 컨테이너 자체가 무너지는 것을 확인 할수 있으니.. 실험은 이정도면 충분 할듯..
관련링크
http://blog.empas.com/electr/18722509
"왜냐하면, 연관 컨테이너(Associative Containers)의 연관 자체가 무너지기 때문이다"
바꾸어 말하면, 연관 컨테이너(Associative Containers)로써의 가치가 없어진다는 것이며, 컨테이너의 자료들을 신용할수 없다 는것을 의미한다.
그래서 C++ 표준화 위원회에서 연관 컨테이너(Associative Containers)의 요소를 정렬할때 쓰는 비교함수는 같은 값에 대해서 false를 리턴하도록 규정하였다.(즉, 비교함수가 객체를 비교할때 strict weak ordering 을 정의해야 한다. 관련 주소 http://en.wikipedia.org/wiki/Strict_weak_ordering : 요즘 들어 점점 영어의 벽이 보이기 시작한다.)
무너진다는 표현에 대해서 어떻게 무너지는지에 대한 소개와 코드를 달아둔다.
1. 무너진다는 것은 신용할수 없다라고 이해해도 좋다. 같은 값 2개를 컨테이너에 밀어 넣고(insert), 다시 빼와서(find) 확인하고자 할때, 두개 중 무엇이 나올지 예측할수가 없다.(multiset, multimap 도 마찬가지다.)
코드를 통해 알아보자.
.. 사실 정확한 실험은 되지 못했다; MSVC2005에서의 STL set은 비교함수가 .. <= 로 되어 있으면 런타임에러를 리턴해준다(고맙데..).무시하면 되지만 .. 값이 들어가는 것까지만 봐도 컨테이너 자체가 무너지는 것을 확인 할수 있으니.. 실험은 이정도면 충분 할듯..
관련링크
http://blog.empas.com/electr/18722509
'책 정리 > Effective STL' 카테고리의 다른 글
항목 26: const_iterator나 reverse_iterator, const_reverse_iterator도 좋지만 역시 쓸만한 것은 iterator이다 (0) | 2008.07.26 |
---|---|
항목 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 |
항목 20 : 포인터를 저장하는 연관 컨테이너에 대해서는 적합한 비교(비교함수) 타입을 정해주자 (0) | 2008.07.18 |
항목 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 |
최근댓글