2

我有一个有两个属性的类:

 set< int > ens1_;
 set< int > ens2_;

现在,我有一种方法可以找到这两组之间的交集。这是我在方法中写的:

set< int > ens;
set< int >::iterator it;

it = set_intersection(ensEntier1_.begin(), ensEntier1_.end(), ensEntier2_.begin(), ensEntier2_.end(), ens.begin());
return ens;

它在 stl_algo.h 内编译时给我一个错误,但我不知道从哪里开始纠正错误

感谢您的时间

艾蒂安

4

3 回答 3

1

看起来你需要insert_iterator为你的结果使用类似的东西。

还不清楚ensEntier1_andensEntier2_你如何传递set_intersection对应于ens1_and ens2_,但目前我假设他们这样做。

编辑:这是一个工作示例:

#include <algorithm>
#include <set>
#include <iterator>
#include <iostream>

int main(){ 

    std::set<int> set1;
    std::set<int> set2;

    set1.insert(1);
    set1.insert(2);
    set1.insert(5);

    set2.insert(2);
    set2.insert(3);
    set2.insert(5);

    std::set<int> result;

    std::set_intersection(set1.begin(), set1.end(), 
                          set2.begin(), set2.end(), 
                          std::inserter(result, result.end()));
    std::copy(result.begin(), result.end(), 
              std::ostream_iterator<int>(std::cout, "\n"));
    return 0;
}
于 2011-04-03T03:05:15.090 回答
1

set_intersection您调用的重载的第 5 个参数需要一个输出迭代器;ens.begin()不返回输出迭代器试试这个:

set<int> ens;
set_intersection(
    ens1_.begin(),
    ens1_.end(),
    ens2_.begin(),
    ens2_.end(),
    inserter(ens, ens.end())
);
return ens;

注意:确保您#include <iterator>.

于 2011-04-03T03:07:30.247 回答
0

set_intersection如果使用容器的本机迭代器,则必须写入诸如 的序列容器vector,而不是诸如 的关联容器。set

试试这个:

vector< int > ens( min( ensEntier1_.size(), ensEntier2_.size() );
vector< int >::iterator it;

it = set_intersection(ensEntier1_.begin(), ensEntier1_.end(), ensEntier2_.begin(), ensEntier2_.end(), ens.begin());
ens.erase( it, ens.end() );
return ens;
于 2011-04-03T03:05:02.330 回答