在循环中设置交集

时间:2012-12-09 16:00:30

标签: c++ stl for-loop set intersection

我的功能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;
   }

非常感谢!

1 个答案:

答案 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的结果写入其中一个输入中。因此是一个临时变量。