什么是替代在C + +
问题描述:
到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?
答
另一种方法是将自己的产品推出,如Kerrek SB did in his answer至your question。
也就是说,理解并解决您使用std::set_difference()
时遇到的问题要好得多,而不是解决这个问题。
例如,被我碰到一个涉及含set_difference
行templates
长的编译器错误,我会打破这种成一个小一系列独立的,简单的语句,这将使查明错误要容易得多:
#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 2011-12-26 20:40:37