我有一个无符号整数的向量向量。我需要找到所有这些无符号整数向量的交集,为此我编写了以下代码:
int func()
{
vector<vector<unsigned> > t;
vector<unsigned> intersectedValues;
bool firstIntersection=true;
for(int i=0;i<(t).size();i++)
{
if(firstIntersection)
{
intersectedValues=t[0];
firstIntersection=false;
}else{
vector<unsigned> tempIntersectedSubjects;
set_intersection(t[i].begin(),
t[i].end(), intersectedValues.begin(),
intersectedValues.end(),
std::inserter(tempIntersectedSubjects, tempIntersectedSubjects.begin()));
intersectedValues=tempIntersectedSubjects;
}
if(intersectedValues.size()==0)
break;
}
}
每个向量都有9000个元素,在“t”中有很多这样的向量。当我对我的代码进行分析时,发现set_intersection占用了最长的时间,因此在func()被多次调用时会导致代码变慢。请问有人可以建议如何使代码更加有效率吗?
我正在使用:gcc(GCC)4.8.2 20140120(Red Hat 4.8.2-15)
编辑:vector“t”中的每个向量都已排序。