2012-03-07 7 views
6

set의 요소를 변경하려고하므로 set<T>::iterator을 사용했습니다. 그러나 컴파일러는 "요소가 const"라고 주장합니다. 그렇다면 나는 set<T>::iteratorconst_iterator이라는 것을 깨달았습니다.설정 요소를 변경하는 방법은 무엇입니까?

그래서 요소를 어떻게 바꿀 수 있습니까? 지우고 새 것을 넣으시겠습니까?

답변

20

set의 요소는 정렬 된 순서로 표시됩니다. 요소를 수정할 수있는 경우이 정렬 순서를 유지할 수 없습니다. 따라서 항목을 수정할 수 없습니다. 기존 요소를 지우고 새 요소를 삽입해야합니다.

+5

요소에 대한 일부 변경 사항은 정렬 방법에 영향을주지 않습니다. 정렬 순서에 영향을주지 않는 변경을하고 싶다면 마지막 수단으로 항상'const_cast'가 있습니다. 위험하고 아름답 지 않지만 그럼에도 불구하고. – jogojapan

+0

고마워. 그거 알아. 그럼 이것이 요소를 수정하는 유일한 방법입니까? –

+2

'erase'는 호출 한 사용자 코드가 throw하지 않는 한 throw하지 않기 때문에 새로운 요소를 삽입하고 이전 요소를 지우는 것이 좋습니다. 그게 당신에게 강력한 예외 보장의 기회를 제공합니다. –

0

편집 : 설정의 특정 위치에 요소를 추가 할 수 없습니다. 세트는 사용자가 수행하는 작업에 관계없이 정렬 된 순서 여야합니다. 따라서 특정 요소를 지우고 새 요소를 삽입하여 set의 순서가 손실되지 않도록해야합니다.

set에 대한 자세한 내용을 읽어보세요.

관련 문제