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