2011-12-26 81 views
-1

到set_difference我有兩個sets。它們具有一些共同的元件(套有字符串作爲thier元素)什麼是替代在C + +

像: set1具有元件

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

set2具有元件

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

我想將值「1-1」合併成一組 和值「1-3」到另一個。 我知道set_difference將爲me.But做的工作有些我是多麼面臨的一些問題與set_ifference。請檢查here

是否有任何替代使用set_difference實現相同reults?

+2

另一種方法是...通過'set_difference'解決您遇到的問題。 – tenfour 2011-12-26 20:40:37

回答

3

另一種方法是將自己的產品推出,如Kerrek SB did in his answeryour question

也就是說,理解並解決您使用std::set_difference()時遇到的問題要好得多,而不是解決這個問題。

例如,被我碰到一個涉及含set_differencetemplates長的編譯器錯誤,我會打破這種成一個小一系列獨立的,簡單的語句,這將使查明錯誤要容易得多:

#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的五個參數是否是它所期望的類型,並且會讓我很快看到它們中的哪些導致了問題,因爲它們都是在單獨的語句中聲明的。

一旦我解決了這個問題,當然我會重構刪除不必要的變量。