有效地删除c ++中的union大向量?

时间:2016-12-30 12:12:27

标签: c++ c++11

我需要联合一百万个载体才能这样做我正在使用以下程序。每个向量包含十亿个元素。联合的结果不应包含任何重复。

set<unsigned> myfunc()
{
    vector<vector<unsigned> > vec(1000000); 
    set<unsigned> result;
    for(int i=0; i<1000000; i++)
       result.insert(vec[i].begin(), vec[i].end()); //vec[i] contains a billion elements

    return result;
}

我是否可以通过某种方式有效地结合两个大型载体?由于上面的代码似乎运行了2个多小时。我在128 GB RAM的机器上运行代码

1 个答案:

答案 0 :(得分:1)

显而易见的方法是将std::set_union()std::sort() ed std::vector<unsigned> s一起使用:

std::vector<unsigned> myfunc()
{
    vector<vector<unsigned> > vec(1000000);
    std::vector<unsigned> result, tmp;
    for(int i=0; i<1000000; i++) {
        std::sort(vec[i].begin(), vec[i].end())
        std::set_union(vec[i].begin(), vec[i].end(),
                       result.begin(), result.end(),
                       std::back_inserter(tmp));
        swap(tmp, result);
        tmp.clear();
   }
   return result;
}