2011-12-26 2 views
-1

C++에서 set_difference하는 대체 무엇 나는 두 sets 몇 가지 공통 요소 (세트, 자신의 요소로 문자열을 가지고)과 같은

이 .they 있습니다 set1 요소

"1-2","1-1","3-4" 

set2 요소를 가지고있다을

값 "1-1"을 하나의 세트로 가져 오십시오. 및 값 "1-3"을 다른 것으로. 나는 set_ifference와 함께 몇 가지 문제에 직면하고 어떻게 일부는 같은 reults를 달성 set_difference를 사용하여 어떤 대안이 있습니까 here

확인 호야 set_difference는하건위한 일을 할 것입니다 알아?

+2

대안은 'set_difference'로 문제를 해결하는 것입니다. – tenfour

답변

3

대체 방법은 Kerrek SB did in his answer에서 your question으로 직접 롤백하는 것입니다.

그렇다면이 문제를 해결하기보다는 std::set_difference()으로 문제를 해결하고 해결하는 것이 훨씬 더 낫습니다.

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <set> 
#include <string> 

int main() 
{ 
    typedef std::set<std::string> set_of_strings; 
    set_of_strings s1, s2, result; 

    s1.insert("1-2"); 
    s1.insert("1-1"); 
    s1.insert("3-4"); 

    s2.insert("1-2"); 
    s2.insert("1-3"); 
    s2.insert("3-4"); 

    // Temporary variables for debugging only 
    set_of_strings::iterator s1_begin = s1.begin(); 
    set_of_strings::iterator s1_end = s1.end(); 
    set_of_strings::iterator s2_begin = s2.begin(); 
    set_of_strings::iterator s2_end = s2.end(); 
    set_of_strings::iterator result_end = result.end(); 
    std::insert_iterator<set_of_strings> result_inserter = std::inserter(result, result_end); 

    std::set_difference(s1_begin, s1_end, 
         s2_begin, s2_end, 
         result_inserter); 

    std::copy(result.begin(), 
       result.end(), 
       std::ostream_iterator<std::string>(std::cout, "\n")); 
} 
: 예를 들어

, 나는 set_difference를 포함하는 라인에 templates을 포함하는 긴 컴파일러 오류를지고 있었다, 나는 훨씬 쉽게 오류를 정확히 파악하게됩니다 별도의 간단한 문장의 작은 시리즈에 이것을 깰 것

컴파일러는 각각 set_difference의 5 개 매개 변수가 예상되는 유형인지 확인하고 어떤 매개 변수가 별개의 명령문에서 모두 선언 되었기 때문에 어느 매개 변수가 문제를 일으키는 지 빠르게 확인할 수 있습니다.

일단 내가이 문제를 해결하면 불필요한 변수를 제거하기 위해 리팩터링하고 싶습니다.