2011-12-26 3 views
-1

У меня есть два sets .Они имеют некоторые общие элементы (комплекты имеют строки в качестве тир элементов), что является альтернативой set_difference в 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 .please проверить here

Есть ли альтернатива использованию set_difference достижения тех же reults?

+2

Альтернатива заключается в том, чтобы исправить проблему, имеющуюся с 'set_difference'. – tenfour

ответ

3

Альтернативой будет рулон, как Kerrek SB did in his answer до your question.

Сказали, что было бы гораздо лучше понять и решить проблему у вас с std::set_difference(), а не работать вокруг нее.

Например, если бы я получаю длинные ошибки компилятора, связанные с templates на строке, содержащей 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 имеет тот тип, который он ожидает, и позволит мне довольно быстро увидеть, какая из них вызывает проблему, поскольку все они объявлены в отдельных операциях.

Как только я решил проблему, я бы реорганизовал, чтобы удалить ненужные переменные, конечно.

Смежные вопросы