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个最小元素位于其最终位置,即在前面,它就会停止排序。