STL 컨테이너 세트 및 맵은 엄격한 약한 순서로 요소를 제공한다고 생각했습니다. 그러나, 역 참조를 통해 요소의 값을 찾고 변경하여 반복기를 얻는다면 순서를 복원하지 못하는 것으로 밝혀졌습니다. 이는 23.1.2.2 및 23.3.3.2를 위반합니다. 그것은 (2008 년 MS VS) STL의 내 버전의 버그세트의 엄격한 약한 순서 매기기 감소
5 10 20 30
5 3 20 30
5 3 20 30 40
가 : 여기
int nv = 3;
set<int> s = set<int>();
s.insert(5);
s.insert(10);
s.insert(20);
s.insert(30);
for(set<int>::const_iterator cit = s.begin(); cit != s.end(); ++cit)
cout<<*cit<<" ";
cout <<endl;
set<int>::iterator it = s.find(10);
*it = nv;
for(set<int>::const_iterator cit = s.begin(); cit != s.end(); ++cit)
cout<<*cit<<" ";
cout <<endl;
s.insert(40);
for(set<int>::const_iterator cit = s.begin(); cit != s.end(); ++cit)
cout<<*cit<<" ";
cout <<endl;
가 생성하는 코드는? 아니면 내가 틀렸어?
아니요, 위 코드가 컴파일, 링크 및 실행됩니다. – flashnik
컴파일러 또는 라이브러리가 손상된 경우에만 컴파일 할 수 있습니다. 예를 들어, 현재 초안 23.2.4/6 : " 값 유형이 키 유형과 동일한 연관 컨테이너의 경우 iterator와 const_iterator는 모두 상수 반복자입니다." –
@flashnik : 예 STL 또는 컴파일러의 구현에서 버그가 있습니다. 제 의견으로는 컴파일이 허용되어서는 안됩니다. –