도와주세요. multiset
글쓴이: bizzare / 작성시간: 목, 2005/04/14 - 4:31오후
다음과 같은 코드가 있습니다.
보시면 아시겠지만..
myset 을 만들어서 그 첫번째 항목을 reference로 받고 싶습니다. (물론 예제라서 아직 항목은 넣진 않은 set입니다. )
그런데 윈도우에서는 이러한 코드가 잘 돌아가는데 (VC++ 6.0)
GCC 3.4버전에서는 에러가 나더군요.
그 이유를 살펴보니..
GCC 3.4에서는
iterator와 const_iterator가 둘 다
red black tree의 const_iterator를 typedef 한 녀석이더라고요.
그래서 밑의 코드에서 begin은 iterator를 return하는데
결국은 이 놈은 const reference가 되어
일반 reference에는 대입이 안된다는 에러가 납니다.
하지만 제가 짜고 있는 코드 상에서는 이와 같은 형식의 구문이 꼭 필요한데..
1) iterator도 const_iterator로 되어 있는 것이 올바른 것인지.(즉, GCC 3.4버전의 버그가 아닌지)
2) 만일 올바른 코드라면 어떻게 이러한 문제를 해결할 수 있는지
에 대하여 조언 부탁드립니다.
int main(int argc, char *argv[]) { std::multiset<int> myset; std::multiset<int>::reference ref = *(myset.begin()); return EXIT_SUCCESS; }
Forums:
Re: 도와주세요. multiset
이것 역시 에러 나는 것이 정상입니다. ^^; 그 이유는 당연합니다. set의 value_type은
바로 key_type이기도 하기 때문입니다. 만약 외부에서 마음대로 key를 변경할 수
있다면 항상 정렬된 상태를 유지해야 한다는 요구 조건을 만족할 수 없을 것입니다.
두 가지 상황을 생각할 수 있습니다.
이 때는 기존의 원소를 지우고 새로 삽입하는 수밖에 없습니다.
다른 상황은
이 때는 S::key_part에 의해서만 정렬이 되므로 S::value_part만 변경한다는
점만 지키면 문제가 없습니다. 캐스팅이 눈에 거슬리긴 하지만요.
댓글 달기