我需要联合一百万个载体才能这样做我正在使用以下程序。每个向量包含十亿个元素。联合的结果不应包含任何重复。
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的机器上运行代码
答案 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;
}