-4

次のコードでエラーが発生しています.. 38行目でエラーが発生しています。なぜかわからないのですが、多くの方法で試しましたが解決しませんでした。

#include <iostream>
#include <fstream>
#include <algorithm>
#include<set>
using namespace std;
#define now 5519    
int main()
{   
    set<int> a[now];
    set<float>dist[now];
    set<int>insect;
    //set<int> v(10);
    FILE *fwp=fopen("wp02","r");
    int w,at,dis;
    set<int>::iterator it;
    while(1)
    {
        if(fscanf(fwp,"%d",&w)==EOF)
        {
            fclose(fwp);
            break;
        }
        else
        {
            fscanf(fwp,"%d%f\n",&at,&dis);
            a[w].insert(at);
            dist[w].insert(dis);
        }
    }
    for(int i=0;i<now;i++)
    {
        if(a[i].size()==0)
            continue;
        for(int j=i;j<now;j++)
        {
            if(a[j].size()==0)
                continue;
            set<int> v;
            //it=set_intersection (a[i], a[j], v);   
            it=set_intersection (a[i],a[i]+a[i].size(), a[j], a[j]+a[j].size(), v);
            //it=set_intersection (a[i].begin(),a[i].end(), a[j].begin(), a[j].end(), v.begin());
        //  v.resize(it-v.begin());
            for (it=v.begin(); it!=v.end(); ++it)
            {
                cout << ' ' << *it;
            }

        }
    }
return 0;
}
4

3 に答える 3

0

std::set_intersectionとはまったく関係ありませんstd::set。このアルゴリズムは 2 つの範囲で動作し、両方に存在する各要素を出力ストリームにコピーします。各入力範囲は、反復子のペアによって指定されます。最初の反復子は範囲内の最初の要素を指し、2 番目の反復子は範囲の終わりを超えて指します。これは、範囲の標準的な規則です。他の多くの場所と同様に、任意の標準コンテナーからイテレーターのペアを取得できます。標準コンテナーの場合、メンバー関数は、コンテナーが保持する要素の範囲を指定する反復子を返しますbegin()end()したがって、どのコンテナ タイプでも次のようになります。

my_container container;
// stuff objects into container
my_container other_container;
// stuff objects into other_container
my_container intersection;
std::set_intersection(container.begin(), container.end(),
    other_container.begin(), other_container.end(),
    std::back_inserter(intersection));
于 2013-06-07T17:58:19.087 に答える