选择性地排序矢量c ++

Jan*_*ora 1 c++ sorting vector c++11

我有以下向量:

vector<unsigned> vec = {5, 6, 5, 4, 1, 3, 0, 4}
Run Code Online (Sandbox Code Playgroud)

现在我想用奇数索引按字典顺序对这个向量进行排序(如果奇数索引相等,那么偶数索引).这样排序的矢量"vec"是:

   {0, 4, 1, 3, 5, 4, 5, 6}
Run Code Online (Sandbox Code Playgroud)

我知道std :: sort将完全排序"vec".是否可以使用std :: sort有选择地对向量进行排序.同样适用于std :: lower_bound.是否可以仅使用奇数索引找到lower_bound.

我想要与对矢量相同的效果.出于效率原因,我不将vec存储为对的向量.

Jar*_*d42 6

使用range-v3,您可以:

std::vector<unsigned> vec = {5, 6, 5, 4, 1, 3, 0, 4};
auto pair_view = ranges::view::zip(vec | ranges::view::stride(2),
                                   vec | ranges::view::drop(1) |  ranges::view::stride(2));

ranges::sort(pair_view);
Run Code Online (Sandbox Code Playgroud)

演示