2012-06-10 3 views
2

나는 가정에 의존하는 수 (즉 : 그것은 표준이 보장되어 있습니까?) 그 :C++ 집합 반복 iterating - 반복 결과가 집합을 기준으로 정렬 되었습니까?

  • set<T>::begin() 세트에서 가장 작은 요소를 가리 킵니다?
  • 반복 설정 (set<T>::begin()에서 set<T>::end()까지) 요소가 증가하는 순서로 나타 납니까?
  • 그리고 확실한 것은 : map의 키에 대해 이러한 속성이 유지됩니까?

나는 setSTL에서 map 의미한다.

P. 나는 abut operator<()을 알고 자신의 비교자를 정의합니다. 이 표준에 대해 어떤 말을하고 있는지 확인해주십시오.

답변

5

예, 요소 (키) bool operator< 또는 템플릿 매개 변수로 집합 (지도)에 전달 된 비교 함수 작성자에 따라 정의에 의존 할 수 있습니다. 따라서 순서는 사용 된 비교기에 따라 가장 작은 것부터 가장 큰 것까지입니다. 연관 컨테이너의 요구 사항을 다루는 C++ 11 표준에

, §23.2.4 :

각 연관 컨테이너가 키에 파라미터와 순서 관계가 엄격한 약한 순서를 유도 비교되는

(25.4) 키 요소에. 또한 map 및 multimap은 임의의 유형 T를 키와 연관시킵니다. Compare 유형의 객체를 컨테이너의 비교 객체라고합니다.

후, 동일한 섹션의

연관 컨테이너 반복자 근본적인 속성들은 비 하강에 의해 정의 된 키의 비 내림차순 용기 반복이다 그것들을 구성하는 데 사용 된 비교는 입니다. value_comp는 비교 함수

거짓 i에서 j까지의 거리 (J * I *), value_comp 긍정적되도록 두 dereferenceable 반복자 i와 j == 들어.

+0

표준을 참조 할 수 있습니까? –

+0

@GrzegorzWierzowiecki 방금 C++ 11 표준에서 인용 부호를 추가했습니다. – juanchopanza

+0

고맙습니다. 그게 제가 궁금해 한 것입니다. Btw. 구형 C++ 표준에 적용되는지 알고 있습니까? –

6

순서는 사용 된 비교기에 따라 다릅니다 (맵에서 세 번째 템플릿 인수, 설정에서 두 번째). 기본값은 std::less<T>이며 세트/맵에 오름차순을 제공합니다 (예).

1

짧은 대답 : 예.

길게 대답 : 두 std :: set 및 std :: map은 두 번째 템플릿 인수 - 요소를 비교하는 이진 술어를 사용합니다. 기본적으로 이것은 std :: less - 단일 부울 함수를 구현하는 클래스이며, 자체는 연산자 <의 관점에서 정의됩니다.

stl 템플릿을 인스턴스화 할 때 달리 지정하지 않으면 연산자 <이 키 순서를 정의합니다. N.B. (부분) 순서를 정의하지 않는 부울 조건부를 사용하면 이상한 일이 발생할 수 있습니다. :)

+1

잘못하고 있습니다. 더 긴 대답은 "yeeeeeeeeeeeeeeeees"여야합니다. –