C++ 使用虚拟变量在循环内切片std::vector的最佳方法
我有一个通用的代码结构,它迭代一个结构向量,对该结构执行一些操作,并将它们附加到一个新的结构向量。然后对新的结构向量进行排序C++ 使用虚拟变量在循环内切片std::vector的最佳方法,c++,loops,stdvector,C++,Loops,Stdvector,我有一个通用的代码结构,它迭代一个结构向量,对该结构执行一些操作,并将它们附加到一个新的结构向量。然后对新的结构向量进行排序 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++){
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;
}
vec now
现在,向后推(someStruct)
对于(i=0;i
我的问题主要是在最后一部分中,我创建了一个伪向量,它采用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;
//从vec返回top\n结构
排序(next.begin()、next.end()、myComparitor);
虚拟血管内皮细胞;
对于(i=0;i
有没有一种更有效的从排序向量切片的方法?更具体地说,我质疑使用虚拟向量来存储top-n结果。现在,我要说的是,std::sort
应该被看作是某种通用的排序算法(不是字面意义上的)。因为需要top-n结果,所以我可以使用优先级队列。但是关于存储中间结果的虚拟变量的问题仍然存在。这应该可以:
// 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);
顺便说一句,你为什么忘记了所有的
代码>s?注释是用C++中的/
或/*注释*/
编写的,这与我使用抽象变量来表示未定义的函数的原因相同,这些函数传递了我试图执行的操作…上下文。我不尝试对前N个元素进行排序。我试图返回已排序vec的前N个元素。因此,用我的原始行替换std::partial_sort
,然后使用接下来的两行。@user18764查看一下,它考虑指定范围内的所有元素,但一旦它能够确保N个最小元素位于其最终位置,即在前面,它就会停止排序。