2008.07.19 15:52 책 정리/Effective STL
결론부터 말하는게 더 의미전달이 잘 될것 같아, 시작부터 말한다.

"왜냐하면, 연관 컨테이너(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


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요