c++ - 有选择地排序 vector C++

标签 c++ sorting c++11 vector

我有以下 vector :

vector<unsigned> vec = {5, 6, 5, 4, 1, 3, 0, 4}

现在我想按奇数索引按字典顺序对这个 vector 进行排序(如果奇数索引相等,则按偶数索引)。这样排序的 vector “vec”是:

   {0, 4, 1, 3, 5, 4, 5, 6}

我知道 std::sort 将完全对“vec”进行排序。是否可以使用 std::sort 有选择地对 vector 进行排序。对于 std::lower_bound 类似。是否可以仅使用奇数索引找到 lower_bound。

我想要和 vector 对一样的效果。出于效率原因,我没有将 vec 存储为对 vector 。

最佳答案

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);

Demo

关于c++ - 有选择地排序 vector C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41829450/

相关文章:

c++ - 使用动态分配的数组创建哈希表?

C++ Inventory & Item Crafting System - 将 "stuff"转换为 hash_tag "garblygook"并反转 hash_tags 以获得真实的 "stuff"

c++ - std::function 和错误:没有匹配的函数来调用

javascript - 通过传递所需字段的字符串值对列表进行排序,然后在 JavaScript 中按日期进行第二次排序

mysql - 按首选平均值排序

c++ - 我们是否应该在大型 std::vector 中存储指向类实例的智能指针以获得更好的性能?

c++ - 在不被 TCP 堆栈合并的情况下在单独的 TCP 段中发送数据

linux - 对两列的制表符分隔文件进行排序和统一

c++ - C/C++ union 中元素的内存位置

c++ - 在 C++ 中手动调整数组大小