我具有遍历结构向量的通用代码结构,对结构进行一些操作,并将其附加到新的结构向量上。然后,我对新的结构向量进行排序。
vec<myStruct> now
now.push_back(someStruct)
for (i = 0; i < end; i++){
vec<myStruct> next;
for (j = 0; j < now.size(); j++){
for (k = 0; k < end_k; k++){
myStruct anotherStruct = now[j];
anotherStruct = somefunction(anotherStruct, k);
next.push_back(anotherStruct);
}
}
std::sort(next.begin(), next.end(), myComparitor);
//return top_n structs from vec<myStruct>
vec<myStruct> dummy;
for (i = 0; i < limit; i++){
dummy.push_back(next[i]);
}
now = dummy;
}
我的问题主要是在最后一部分中,我创建了一个采用top-n结构的虚拟矢量:
//return top_n structs from vec<myStruct>
std::sort(next.begin(), next.end(), myComparitor);
vec<myStruct> dummy;
for (i = 0; i < limit; i++){
dummy.push_back(next[i]);
}
now = dummy;
有没有一种更有效的从排序向量中切片的方法?更具体地说,我质疑使用伪向量存储前n个结果。现在,我想说std::sort
应该被认为是某种通用的排序算法(不是按字面意思理解)。由于需要top-n结果,因此我可以使用优先级队列。但是有关存储中间结果的哑变量的问题仍然存在。
答案 0 :(得分:4)
这应该有效:
// sort only first limit elements
std::partial_sort(next.begin(), next.begin() + limit, next.end(), myComparator);
// truncate
next.resize(limit);
// update now
now = std::move(next);