2014-12-29 1 views
-4

vector<vector<int> >에 중복 된 요소를 모두 제거하고 set<vector<int> >을 사용하고 싶습니다. 세트의 정의에서 <vector<int>> 비교 기능을 정의해야합니까?

:

template < class T,     // set::key_type/value_type 
     class Compare = less<T>,  // set::key_compare/value_compare 
     class Alloc = allocator<T>  // set::allocator_type 
     > class set; 

나는 더 '<'이 없기 때문에 내가 vector<int>에 대한 '>'또는 '==', vector<int>을 비교하는 비교 클래스를 정의한다고 생각합니다.

그러나, 나는 다음과 같이 엑스 코드에 코드를 작성하고 올바르게 컴파일되었습니다

vector<vector<int> > res = permute(num); //num = {1,1,2}, res gets its permutation but has duplicates 
set<vector<int> > s(res.begin(), res.end()); //remove all duplicates 
res.assign(s.begin(), s.end()); 

는 다행히 res 내가 원하는 정확히 어떤, 어떤 중복없이 사전 순으로 반환됩니다.

저는 벡터에 대한 비교 함수를 정의하지 않았기 때문에 이것이 어떻게 작동하는지 궁금합니다. 나는 수동 책을 보았고 나의 질문에 답할 수있는 것을 찾지 못했습니다. 아무도 나에게 약간의 힌트를 줄 수 있습니까? 고마워요!

+5

['std :: vector'에 비교 연산자가 없다고 생각하는 이유가 무엇입니까?] (http://en.cppreference.com/w/cpp/container/vector/operator_cmp) – juanchopanza

+0

@juanchopanza dang, 당신은 나를 이겼습니다. 그것. – Griwes

+6

이 질문은 문서를 검색하여 신속하게 증명할 수없는 잘못된 가정에 기반을두고 있기 때문에 주제가 아닌 것 같습니다. – dasblinkenlight

답변

3

std::less<T>은 특수한 경우가 아니면 T 개체에서 operator<을 호출합니다. std::vector에는 operator<이 정의되어있어 요소의 사전 식 비교를 제공합니다.

관련 문제