0

我的功能search_intersection收到一套<set<string> >& inter_section

我想得到所有子集的交集inter_section

例如,如果:

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;
   }

非常感谢!

4

1 回答 1

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 的调用传递了迭代器指向的集合的开始/结束。此外,至少有两个地方const应该应用于此代码。

您也不能将 的结果set_intersection写入其中一个输入。因此是一个临时变量。

于 2012-12-11T06:04:25.310 回答