我有两个sets
。他们有一些共同的元素(集合有字符串作为他们的元素)
like :
set1
有元素
"1-2","1-1","3-4"
set2
有元素
"1-2","1-3","3-4"
我想将值“1-1”取出到一组中,将值“1-3”取出到另一组中。我知道set_difference
会为我完成这项工作。但是我遇到了一些问题。set_ifference
请在此处查看
有没有其他方法可以使用set_difference
实现相同的结果?
我有两个sets
。他们有一些共同的元素(集合有字符串作为他们的元素)
like :
set1
有元素
"1-2","1-1","3-4"
set2
有元素
"1-2","1-3","3-4"
我想将值“1-1”取出到一组中,将值“1-3”取出到另一组中。我知道set_difference
会为我完成这项工作。但是我遇到了一些问题。set_ifference
请在此处查看
有没有其他方法可以使用set_difference
实现相同的结果?
另一种方法是自己动手,正如Kerrek SB 在回答你的问题时所做的那样。
也就是说,理解和解决您遇到的问题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
5 个参数中的每一个是否属于它所期望的类型,并且可以让我很快看到它们中的哪一个导致了问题,因为它们都是在单独的语句中声明的。
一旦我解决了这个问题,我当然会重构以删除不必要的变量。