蔷薇尖的风 2023-12-02 17:17 采纳率: 0%
浏览 4

sort函数自定义排序规则

  1. 背景

存在一个数组,vector nums{1,1,1,1,1},这个数组必须要有重复值
我想要对其进行排序,我想要让其从小到大排序,便自定义sort的第三个参数,代码如下:

    sort(nums.begin(), nums.end(), [](const int& a, const int& b)
        {
            if (a != b) return a < b;
            return true;
        });

这段代码会报错,具体原因我不知道,所以想来问问大家。

  1. 疑点

但是用下面的代码进行排序,却没有问题。

    sort(nums.begin(), nums.end(), [](const int& a, const int& b)
        {
            return a < b;
        });

这段代码和上面我实现的代码,按理来说都不会有问题才对,但是上面的代码会报错。
麻烦各位兄弟姐妹帮我看看,究竟问题出在哪里,谢谢大家。

  • 写回答

2条回答 默认 最新

  • 蔷薇尖的风 2023-12-02 17:38
    关注

    原因
    sort函数是严格的弱排序,也就是说无论是升序排序还是降序排序,当两个元素相等的时候,不能返回true,只能返回false。

    所以上面错误的代码修改成

       sort(nums.begin(), nums.end(), [](const int& a, const int& b)
            {
                if (a != b) return a < b;
                return false;
            });
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 12月2日

悬赏问题

  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂