如何找到n向量的并集?

Shr*_*n40 0 c++ vector set-union

我有一个超边界的二维向量以及一个邻接列表.我必须找到hyperEdges[i].size()向量的联合,但我只能找到两个向量的联合.我可以对下面的代码做些什么改进呢?我想将union存储到新声明的2-D向量中connectedEdges

void find_union()
{
    connectedEdges.resize(nEdges+1);
    for(int i = 1; i <= nEdges; i++)
    {
        vector<int>::iterator it;
        connectedEdges[i].resize(nEdges+1);

        for(int j = 1; j < hyperEdges[i].size()-1; j++)
        {
            int p = hyperEdges[i][j-1];
            int q= hyperEdges[i][j];
            it = set_union(adjL[p].begin(), adjL[p].end(),adjL[q].begin(),adjL[q].end(), connectedEdges[i].begin());
        connectedEdges[i].resize(it-connectedEdges[i].begin());
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

示例: {1,2,4,6,8}

{1,2,3,5,6}

{1,4,7,13,15}

这三套联盟应该是{1,2,3,4,5,6,7,8,13,15} 我的计划回归{1,2,3,4,5,6,8}

anx*_*eux 6

如果你有很多向量,我建议将所有这些内容插入单个内容std::set然后将其转储回来std::vector.

像这样的东西:

std::vector<std::vector<int>> src = ...;
std::set<int> all;

for(int i = 0; i < src.size(); i++) {
    all.insert(src[i].begin(), src[i].end());
}

std::vector<int> result(all.begin(), all.end());
Run Code Online (Sandbox Code Playgroud)