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また、このコードに適用する必要がある場所が少なくとも2つあります。

set_intersectionの結果を入力の1つに書き込むこともできません。したがって、一時変数。

于 2012-12-11T06:04:25.310 に答える