使用set_intersection和set给出一个错误

using set_intersection with set giving an error?

本文关键字:set 一个 错误 intersection 使用      更新时间:2023-10-16

在以下代码中出现错误。在第38行,我得到错误,为什么我不知道,但我在很多方面尝试过,但它没有解决PLZ解决我的问题使用set_intersection设置给出一个错误?

#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%fn",&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;
}

set_intersection的最小可编译示例(符合您的代码风格):

#include <algorithm>
#include <set>
int main()
{
    std::set<int> x[10];
    int i = 2;
    int j = 3;
    std::set<int> v;
    std::set_intersection(x[i].begin(), x[i].end(), x[j].begin(), x[j].end(), std::inserter(v, v.begin()));
}

你应该看看set_intersection的一些文档,例如cppreference.com或SGI STL

你会看到它不接受std::set或任何其他容器作为参数

std::set_intersectionstd::set无关。该算法在两个范围上操作,并将两个范围中的每个元素复制到输出流中。每个输入范围由一对迭代器指定;第一个迭代器指向范围内的第一个元素,第二个迭代器指向范围的末尾。这是range的标准约定。您可以从任何标准容器以及许多其他地方获得迭代器对。对于标准容器,成员函数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));