为什么编译器在set_intersection上给我一个错误?

时间:2011-04-03 02:55:14

标签: c++ set set-intersection

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

 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内部编译时出错,但我不知道从哪里开始纠正错误

感谢您的时间

艾蒂安

3 个答案:

答案 0 :(得分:1)

您的结果似乎需要使用类似insert_iterator的内容。

还不清楚您传递给ensEntier1_的{​​{1}}和ensEntier2_set_intersectionens1_的对应关系,但目前我还会假设他们这样做。

编辑:这是一个有效的例子:

ens2_

答案 1 :(得分: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>

答案 2 :(得分: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;