2017-03-20 9 views
0

중복을 방지하는 좋은 방법은 unordered_set입니다. 그러나이 방법은 unordered_set<vector<string>>을 갖고 자 할 때 작동하지 않습니다. 어떻게이 일을 할 수 있습니까? 예를 들어 <"a", "b", "c">이 내 unordered_set<vector<string>>에 복제되지 않도록하고 싶습니다.C++에서 유형 벡터 <string>의 중복을 제거하는 방법?

unordered_set<vector<string>>을 정의 된 클래스 외부에서도 사용할 수 있습니까?

코드 : 당신의 객체 중 한 세트를 구축 중복을 제거하는 방법에는 여러가지가있다

unordered_set<vector<string>> abc({"apple", "ball", "carrot"}); 
abc.insert({"apple", "ball", "carrot"}); 

cout << abc.size() << endl;  //abc.size() should be 1 
+0

내가 직접 해시를 정의해야한다고 생각합니까? 어떻게해야할지 모르겠다. –

+3

{ "a", "b", "c"}를 두 번 추가하고 세트의 크기()를 확인하는 아주 간단한 예제를 게시 할 수 있습니까? –

+0

'unordered_set >' –

답변

0

그 중 하나입니다. std::set이든 std::unordered_set이든 상관없이 결정하는 것은 사용자가 결정할 수 있습니다. 결정은 대개 해시 fuction의 효율성에 달려 있습니다.

이 차례로 도메인에 대한 지식이 필요합니다. 문자열의 벡터가 나타내는 것과 그 값은 무엇입니까? 당신이 좋은 해시 올 경우, 당신은이처럼 구현할 수 있습니다

std::unordered_set<std::vector<std::string>, MyHash> abc; 

내가 단지를에 안전한 내기 말할 것이다 :

다음
struct MyHash 
{ 
    std::size_t operator()(std::vector<std::string> const& v) const 
    { 
     // your hash code here 
     return 0; // return your hash value instead of 0 
    } 
}; 

당신은 그냥 해시와 unordered_set 선언 마음에 좋은 해시 함수가 없다면 처음에는 std::set으로 가십시오.