항목 21과 같은 맹락으로 이어진다.
이것 또한 연관 컨테이너(Associative Containers)의 연관을 무너뜨리게 한다. map 과 multimap 도 키를 바꿀수는 있을 꺼 같지만, 여기선 const 이기 때문에 변경을 못하도록 되어 있다.(캐스팅 하면 가능하지만...) 그래서 이 두개의 컨테이너는 삭제 후 삽입 방법으로 변경해야 한다.
하지만 set 이나 multiset 은 값 자체가 키(Key)이기 때문에, 바꾸는 일은 피해야 한다는 것이다. 이것도 키를 바꾸기 위해선 "삭제 후 삽입"을 해야만 한다.
곰곰히 생각하면 난 바꾸지 않을테니까, const 로 Key를 설정할꺼야. 라고 해서 std::set<const set> 하게 해도 크게 두가지 이유 때문에 무의미하게 된다.
첫째, 사용자 정의 객체를 담을 경우 ... 무엇인가 바꾸거야 하는데 전혀 못 바꾸기 때문에
둘째, const로 키로 쓴다 해도, iterator 로 반환되는것이 const reference 가 아닌 reference로 캐스팅 되기 때문에
(보충) 둘째는 STL 마다 차이는 있지만 MSVC2005 에선 reference로 캐스팅 된다.(다른 컴파일러는 const로 된다 하더라도, 첫째 이유 때문에 역시 무의미하게 된다)
이 말을 못믿는가? 코드를 포함 한다.
보면 나와 있듯이 엉키게 된다. 아.. OTL 간단한건 const로 넣어도 되게 해줘야 하는게 아닌가? 란 생각을 해봤지만, 코드 이식성 때문에 이렇게 한듯하다. (대체적으로 반환값을 reference를 반환하는 컴파일러가 많으니...)
책에 없는 예제이기에 한번 만들어 본 것이고.. 책에 있는 내용중에 연관 컨테이너에 삭제후 삽입할 때 성능 좋은 넣기가 있지만, 요점은 이게 아니라서 뺐다.(힌트는 .. 후위연산자를 사용해서... ㅋㅋ)
관련링크
http://blog.empas.com/electr/read.html?a=18722526
http://ilu8318.egloos.com/785371
이것 또한 연관 컨테이너(Associative Containers)의 연관을 무너뜨리게 한다. map 과 multimap 도 키를 바꿀수는 있을 꺼 같지만, 여기선 const 이기 때문에 변경을 못하도록 되어 있다.(캐스팅 하면 가능하지만...) 그래서 이 두개의 컨테이너는 삭제 후 삽입 방법으로 변경해야 한다.
하지만 set 이나 multiset 은 값 자체가 키(Key)이기 때문에, 바꾸는 일은 피해야 한다는 것이다. 이것도 키를 바꾸기 위해선 "삭제 후 삽입"을 해야만 한다.
곰곰히 생각하면 난 바꾸지 않을테니까, const 로 Key를 설정할꺼야. 라고 해서 std::set<const set> 하게 해도 크게 두가지 이유 때문에 무의미하게 된다.
첫째, 사용자 정의 객체를 담을 경우 ... 무엇인가 바꾸거야 하는데 전혀 못 바꾸기 때문에
둘째, const로 키로 쓴다 해도, iterator 로 반환되는것이 const reference 가 아닌 reference로 캐스팅 되기 때문에
(보충) 둘째는 STL 마다 차이는 있지만 MSVC2005 에선 reference로 캐스팅 된다.(다른 컴파일러는 const로 된다 하더라도, 첫째 이유 때문에 역시 무의미하게 된다)
이 말을 못믿는가? 코드를 포함 한다.
보면 나와 있듯이 엉키게 된다. 아.. OTL 간단한건 const로 넣어도 되게 해줘야 하는게 아닌가? 란 생각을 해봤지만, 코드 이식성 때문에 이렇게 한듯하다. (대체적으로 반환값을 reference를 반환하는 컴파일러가 많으니...)
책에 없는 예제이기에 한번 만들어 본 것이고.. 책에 있는 내용중에 연관 컨테이너에 삭제후 삽입할 때 성능 좋은 넣기가 있지만, 요점은 이게 아니라서 뺐다.(힌트는 .. 후위연산자를 사용해서... ㅋㅋ)
관련링크
http://blog.empas.com/electr/read.html?a=18722526
http://ilu8318.egloos.com/785371
'책 정리 > Effective STL' 카테고리의 다른 글
항목 27 : const_iterator를 iterator로 바꾸는 데에는 distance와 advance를 사용하자. (0) | 2008.07.27 |
---|---|
항목 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 |
항목 21 : 연관 컨테이너용 비교 함수는 같은 값에 대해 false를 반환해야 한다. (0) | 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 |
최근댓글