使用Lambda对Mod进行矢量排序

时间:2016-05-04 16:00:02

标签: c++ lambda c++14

我'我用lambda算子尝试不同的东西来理解。
现在我挂在一个点上。

我想按照模5对这个矢量进行排序:

首先所有int的余数为0,其余为1,余数为2 ....余数4

输入:

12,6,32,33,17,21,9,10,2,8,20

输出

10,20,21,6,12,32,17,2,33,8,9

这就是我想要的吗? 如果是,你可以给我一个提示吗?

我发现了排序运算符并尝试了一些正常排序:

    void order(vector<int> vec){
       sort(begin(vec), end(vec), 
       [](int i, int j) {
           return (i < j);
       }
    );

为了证明我已经做了一些事情^^

2 个答案:

答案 0 :(得分:2)

只需使用%模运算符。

std::sort(vec.begin(), vec.end(),
           [](int a, int b) { return std::abs(a % 5) < std::abs(b % 5); });

答案 1 :(得分:1)

如果您希望按余数排序并按值除以相同的余数,则可以使用:

void order(vector<int> vec){
   sort(begin(vec), end(vec), 
   [](int i, int j) {
       return std::make_tuple( std::abs( i % 5 ), i ) < std::make_tuple( std::abs( j % 5 ), j );
   }
);