我有一个有两个属性的类:
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内部编译时出错,但我不知道从哪里开始纠正错误
感谢您的时间
艾蒂安
答案 0 :(得分:1)
您的结果似乎需要使用类似insert_iterator
的内容。
还不清楚您传递给ensEntier1_
的{{1}}和ensEntier2_
与set_intersection
和ens1_
的对应关系,但目前我还会假设他们这样做。
编辑:这是一个有效的例子:
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;