代码之家  ›  专栏  ›  技术社区  ›  chepseskaf Nick Holt

如何在VC++中使用set_intersection和std::set?

  •  5
  • chepseskaf Nick Holt  · 技术社区  · 14 年前

    我正在尝试用VC10编译VC6项目… 我在set_交集中得到一个错误c2678:我写了一些例子来理解。有人能解释一下如何编译这些代码片段吗?

    #include <vector>
    #include <algorithm>
    #include <iostream>
    #include <set>
    #include <string>
    
    int main( )
    {
        using namespace std;
    
        typedef set<string> MyType;
    
        MyType in1, in2, out;
        MyType::iterator out_iter(out.begin()); 
    
        set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), out_iter);
    }
    

    输出:

    C:\Program Files\Microsoft Visual\Studio 10.0\vc\include\algorithm(4494):错误C2678:“=”binary:未定义接受“const std::basic”类型左侧操作数的运算符(或没有可接受的转换)

    如果我使用 std::vector 而不是 std::set 编译成功。 可接受的)

    1 回复  |  直到 14 年前
        1
  •  6
  •   rwong    14 年前

    尝试 set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), inserter(out, out.begin()) );

    这是因为set_交集希望写入输出迭代器,这会导致输出容器的大小增加。但是,这不能只用一个迭代器来完成(它可以用来覆盖现有的元素,但不能扩大大小)

    编辑:修正了打字错误。使用插入器添加到集合。背部插入器仅适用于向量等。

    编辑2:修正了另一个错误。STL inserter 需要第二个参数,该参数是可能插入位置的提示迭代器。谢谢Chepseskaf。

    推荐文章