【问题标题】:Sorting a Vector by Mod with Lambda使用 Lambda 按 Mod 对向量进行排序
【发布时间】:2016-05-04 16:00:01
【问题描述】:

为了理解,我正在尝试使用 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);
       }
    );

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

【问题讨论】:

  • 那么,如何计算除法后的余数?
  • 只是为了证明我已经做了一些事情是的,你有样板。您是否尝试获取这两个数字的余数并将它们相互比较?
  • 我认为一个好的起点是查看std::sort的文档
  • 你知道%模运算符吗?
  • @Drizzt “只是为了证明我已经做了一些事情^^” 这只是一个荒谬的说法。如果这样的话,每个人都可以带着int main() {} 来到这里并说看看我做了什么,你能不能给我{} plz 里面的codez。

标签: c++ lambda c++14


【解决方案1】:

只需使用% 模运算符。

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

【讨论】:

  • 并在余数相同时添加比较。
  • @stefaanv 对,但看起来 op 没有问过这件事,尽管 hist 输出说他想要它。
  • 什么是操作?我不知道我可以在 return 语句中添加语句。
  • @Drizzt OP 是被问到的人,所以你是这里的 OP。
【解决方案2】:

如果您想按余数排序并且按值使用相同的余数,您可以使用:

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

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多