-1

我有两个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实现相同的结果?

4

1 回答 1

3

另一种方法是自己动手,正如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_difference5 个参数中的每一个是否属于它所期望的类型,并且可以让我很快看到它们中的哪一个导致了问题,因为它们都是在单独的语句中声明的。

一旦我解决了这个问题,我当然会重构以删除不必要的变量。

于 2011-12-26T20:06:47.057 回答