바로 질문 들어간다.
1. a) 다음 코드의 문제점은 무엇이고, 어떻게 수정할 수 있을까?
딱 봐도 문제인것은 키 값을 강제로 변경 시키고 있다. map은 자동 정렬 되기 때문에, 이렇게 key 를 바꾸게 되면, 큰 문제가 생기게 되므로 절대 해야 하지 말아야 한다. 만약 키를 바꾸고 싶다면, 다음 코드처럼 해야 한다.
b) 다음의 코드를 쓰면 어느 정도까지 문제가 해결 될까?
일반적으로 안전하나, 값에 의하여 key 가 변경될 건덕지가 있는 경우 위험하다. 그래서 한가지 사실만 알고 있으면 된다. 절대 키를 건들지 말것
2. set::iterator를 가지고 set의 내용을 수정 할 수 있을까?
수정 할 수는 있으나, 수정해서는 안된다.^^; set 역시 자동 정렬이기 때문에, 값을 변경하는 즉시 규칙은 무너지게 된다.
총평
.. 정렬 상태를 유지하는 값인 Key 를 변경하는것은 정렬 상태를 유지하지 않겠다는 것과 같으므로, ... 다른 컨테이너를 선택해야 되지 않을까 한다.
'책 정리 > More Exceptional C++' 카테고리의 다른 글
More Exceptional C++ 목차 및 링크 (0) | 2008.12.23 |
---|---|
항목 11 : Mastermind (난이도 : 8 ) (0) | 2008.12.23 |
항목 10 : 템플릿 특화(specialization)과 오버로딩(overloading) ( 난이도 : 6 ) (0) | 2008.12.23 |
항목 9 : 똑같은 코드? ( 난이도 : 5 ) (0) | 2008.12.23 |
항목 7 : vector와 deque 사용하기 ( 난이도 : 3 ) (0) | 2008.12.22 |
항목 6 : 컨테이너, 포인터 그리고 컨테이너가 아닌 컨테이너 (0) | 2008.12.22 |
항목 5 : typename ( 난이도 : 7 ) (0) | 2008.12.22 |
항목 4 : 확장 가능한 템플릿 : 상속을 통해서 아니면 특성(traits) 클래스를 통해서? ( 난이도 : 7 ) (0) | 2008.12.22 |
항목 3 : 판단자(predicate) Part 2 : 상태와 판단자 ( 난이도 : 7 ) (0) | 2008.12.20 |
항목 2 : 판단자(predicate) Part 1 : remove()가 삭제 하는 것은? (난이도 : 4 ) (0) | 2008.12.19 |
최근댓글