2011-05-10 5 views
1

나는 세트가 선언 된 클래스 ActiveStatusEffect의 unordered_set을 할 수 없습니다 상태 효과의 각 인스턴스에 할당 된 고유 한 정수 사이. 나는 효과를 정렬하려고하면정렬 unordered_set

그러나, 다음과 같은 :

std::sort(statusSet.begin(), statusSet.end(), [](StatusEffects::ActiveStatusEffect const &se1, StatusEffects::ActiveStatusEffect const &se2){return se1.effect->GetPriority() < se2.effect->GetPriority();}); 

I 얻을 알고리즘 헤더 파일에 많은 오류와 같은

오류 198 오류 C2784 : '_Base1 :: difference_type의 표준 : 운영자 - (const를 표준 : _ Revranit < _RanIt, _Base> &, const를 표준 : _ Revranit < _RanIt2, _Base2> &) 'TEMPL을 추론 할 수 없었다 \ 프로그램 10.0 \는 벤처 \ 포함 파일 (86) \ 마이크로 소프트 비주얼 스튜디오 \ 알고리즘 : 'const를 표준 : _ Revranit < _RanIt, _Base> &' 에서 '부스트 :: unordered_detail :: hash_const_iterator'C에 대한 인수를 먹고 3806

오류 199 오류 C2784 : '_Base1 :: difference_type의 표준 : 운영자 - (const를 표준 : _ Revranit < _RanIt, _Base> &, const를 표준 : _ Revranit < _RanIt2, _Base2> &)' 템플릿을 추론 할 수 없습니다 'const 에 대한 인수 std :: _ Re vranit < _RanIt, _Base는> & 부스트 :: unordered_detail :: hash_const_iterator 'C' 에서 ': \ 프로그램 10.0 \는 벤처 \로는 마이크로 소프트 비주얼 스튜디오 \ 파일 (86) \ 알고리즘 3806

왜 오전 세트를 정렬 할 수 없습니까? 나는 이것을 unordered_set에 관해서는 확실히 확신합니다. 벡터를 정렬하거나 변경하려고 시도하면 에러가 발생하지 않습니다.

+6

세트가 ** 정렬되지 않은 경우 ** 어떻게 정렬합니까 (예 : ** 주문 **)? – Jordan

+0

여하튼 이것은 나를 정말로 웃게했다. .. 그것은 2am와 im에 관한 시간이어야한다. .. – RedX

답변

4
boost::unordered_set<Foo> a; 
a.insert(...); 
... 

std::set<Foo> b(a.begin(), a.end()); 

std::set<Foo> c; 
std::copy(a.begin(), a.end(), std::inserter(c, c.end()); 

Voilà, 정렬 된 집합.

7

unordered_set에는 반복자가 가리키는 항목을 변경할 수 있으므로 집합의 불변성 (다른 항목 중에서 고유성)을 위반할 수 있기 때문에 반복자가 아닌 반복자가 없습니다. 또한 unordered_set을 정렬하면 더 이상 컨테이너의 항목을 찾을 수 없게됩니다 (해시로 작동한다고 가정).

정말로의 경우 항목 집합을 정렬하려면 먼저 vector에 복사 한 다음 정렬해야합니다. 그러나 그 경우에 unordered_set이 처음에 당신에게 적합한 용기라면 고려해 보셨습니까? set을 사용하는 경우는 인 반면 검색 속도는 느려집니다.