【发布时间】:2015-11-18 18:45:56
【问题描述】:
是否有一个单行(或简单的无循环)解决方案可以通过偶数和奇数索引对向量进行排序? 示例:
long entries[] = {0,1,2,10,11}; // indices 0 1 2 3 4
std::vector<long> vExample(entries, entries + sizeof(entries) / sizeof(long) );
vExample.sortEvenOdd(vExample.begin(),vExample.end()); // magic one liner I wish existed...
for (int i = 0; i < vExample.size(); i++)
{
std::cout << vExample[i] << " ";
}
现在我想得到以下输出:
0 2 11 1 10 // corresponding to indices 0 2 4 1 3
【问题讨论】:
-
使用
std::end(entries)而不是长表达式计算它 -
这也有效:
std::vector<long> vExample{0,1,2,10,11} -
如果你可以使用 Boost,
boost.strided就是你所需要的。这样,您甚至不必实际重新排序向量,这可能有助于提高性能。