我的功能search_intersection
会收到一组<set<string> >& inter_section
。
我希望获得inter_section
中所有子集的交集。
例如:if:
inter_section = { { lion, cat } , {lion, bird}, {lion, cat, bird} }
我想:
result = { lion }
目前我做了这个
set<string> search_intersection(set <set<string> >& inter_section)
{
set <set<string> >::iterator iter_ss;
set <string> result;
for (iter_ss = inter_section.begin(); iter_ss != inter_section.end(); ++iter_ss)
{
set_intersection(iter_ss.begin(),iter_ss.end(),
result.begin(),result.end(),
std::inserter(result.begin(),result.end()));
}
cout << endl;
return result;
}
非常感谢!
答案 0 :(得分:0)
让我们再试一次:(未编译的代码)
set<string> search_intersection(const set <set<string> > &inter_section) {
set <string> result;
set <set<string> >::iterator iter = inter_section.begin ();
if ( iter != inter_section.end ()) {
result = *iter;
for ( ++iter; iter != inter_section.end (); ++iter ) {
set <string> temp;
// intersect *iter and result, put into temp
set_intersection(
iter->begin(), iter->end (),
result.begin(), result.end(),
std::inserter(temp,temp.end()));
result = temp;
}
}
return result;
}
请注意,对set_intersection的调用会传递迭代器指向的set的开始/结束。此外,至少有两个地方const
应该应用于此代码。
您也无法将set_intersection
的结果写入其中一个输入中。因此是一个临时变量。