2

私は2つの属性を持つクラスを持っています:

 set< int > ens1_;
 set< int > ens2_;

これで、これら 2 つのセットの交点を見つけるメソッドができました。これが私の方法で書いたものです:

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 内のコンパイルでエラーが発生しますが、エラーを修正するためにどこから始めればよいかわかりません

お時間をいただきありがとうございます

エティエンヌ

4

3 に答える 3

1

結果に のようなものを使用する必要があるようですinsert_iterator

また、 と がどのようにensEntier1_とに対応するかは不明ensEntier2_ですが、今のところ、set_intersection対応しているens1_ens2_仮定します。

編集:ここに実例があります:

#include <algorithm>
#include <set>
#include <iterator>
#include <iostream>

int main(){ 

    std::set<int> set1;
    std::set<int> set2;

    set1.insert(1);
    set1.insert(2);
    set1.insert(5);

    set2.insert(2);
    set2.insert(3);
    set2.insert(5);

    std::set<int> result;

    std::set_intersection(set1.begin(), set1.end(), 
                          set2.begin(), set2.end(), 
                          std::inserter(result, result.end()));
    std::copy(result.begin(), result.end(), 
              std::ostream_iterator<int>(std::cout, "\n"));
    return 0;
}
于 2011-04-03T03:05:15.090 に答える
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>.

于 2011-04-03T03:07:30.247 に答える
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;
于 2011-04-03T03:05:02.330 に答える