c++ - 如何找到 n vector 的并集?

标签 c++ vector set-union

我有一个二维超边 vector 和一个邻接表。我必须找到 hyperEdges[i].size() vector 的并集,但我只能找到两个 vector 的并集。我可以对下面的代码做哪些改进来做到这一点? 我想将并集存储到新声明的二维 vector 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());
        }
    }    
}

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

{1,2,3,5,6}

{1,4,7,13,15}

这三个集合的 union 应该是{1,2,3,4,5,6,7,8,13,15} 但是我的程序返回 {1,2,3,4,5,6,8}

最佳答案

如果你有很多 vector ,我建议将所有 vector 的内容插入到单个 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());

关于c++ - 如何找到 n vector 的并集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968206/

相关文章:

c++ - 有没有一种简单的方法可以在对象 vector 上调用构造函数?

iterator - 在 Java 中加入(联合)集合内部的集合

c++ - std::set_union vector <对<字符串,字符串>>

c++ - C++20 上惯用的 DirectX12 结构初始化中断

python - 根据与其他 2 列相关的条件创建一列

c++ - 作为类型的功能?

c++ - 使用 vector 对堆栈进行排序

haskell - 如何在 haskell 中有效地找到值列表列表的并集?

c++ - 关于C/C++静态库的推理

c++ - 帮助代码模板