我想重新排序向量中的项目,使用另一个向量来指定顺序:
char A[] = { 'a', 'b', 'c' };
size_t ORDER[] = { 1, 0, 2 };
vector<char> vA(A, A + sizeof(A) / sizeof(*A));
vector<size_t> vOrder(ORDER, ORDER + sizeof(ORDER) / sizeof(*ORDER));
reorder_naive(vA, vOrder);
// A is now { 'b', 'a', 'c' }
Run Code Online (Sandbox Code Playgroud)
以下是一个低效的实现,需要复制向量:
void reorder_naive(vector<char>& vA, const vector<size_t>& vOrder)
{
assert(vA.size() == vOrder.size());
vector vCopy = vA; // Can we avoid this?
for(int i = 0; i < vOrder.size(); ++i)
vA[i] = vCopy[ vOrder[i] ];
}
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法,例如,使用swap()?
在这个SO线程中,Brian Postow 提出了一个涉及虚假匿名函数的解决方案:
制作一个comp(L)函数,返回长度为L的数组的comp版本......这样L成为参数,而不是全局
我该如何实现这样的功能?