首页 > 编程语言 >c++结构体数组sort排序出错?(关于sort排序comp比较器的严格弱排序性质)

c++结构体数组sort排序出错?(关于sort排序comp比较器的严格弱排序性质)

时间:2024-02-02 16:00:33浏览次数:25  
标签:sort comp 交换 排序 true 比较

在sort函数比较的时候,它会严格弱排序,比较 a是否 >= b,然后两个对象会进行交换,重新比较一遍,相当于这次比较的是 b是否>= a

a >= b ? 满足: true
b <= a ? 满足: true
这样就出现了一个冲突,不管是a >= b还是b >= a都会返回true的情况,我们都知道sort中只要comp返回true,两个元素就会交换一次,因此comp返回两次true,会对两个元素交换两次,相当于没有交换,因此就会出现无效的比较器的情况。
正确的交换方式: 当 == 的时候,他们不用交换就可以了,此时如果两个元素相等,则都返回false,因此两次false,在sort中就不用交换,因此达到了等于时不交换的目标。

标签:sort,comp,交换,排序,true,比较
From: https://www.cnblogs.com/oiart/p/18003332

相关文章

  • java: Compilation failed: internal java compiler error
    idea启动项目后出现 java:Compilationfailed:internaljavacompilererror错误第一种情况:idea的JDK版本和项目配置的不同。解决方法:查看项目中配置的jdk版本,再查看 idea配置的版本项目配置的:在idea中要查看三个地方的配置 1、File---->Setting------>javacompile......
  • 冒泡排序法的写法
    冒泡排序法的代码如下:publicclassMyTest{publicstaticvoidmain(String[]args)throwsException{//使用冒泡排序法把数组按照升序排列int[]arr=newint[]{92,37,46,8,2};intlen=arr.length;for(inti=0;i<len-1;i++){//......
  • 学习unigui unidbgrid的GridsGroupingSorting【18】
    折腾一天,你不按照demo里的代码来,就是没有效果。procedureTUniGridsGroupingSorting.UniDBGrid1MultiColumnSort(Columns:TUniDBGridColumnArr;Directions:TUniSortDirections);varOrderStr:string;I:Integer;beginUniMainModule.ADOQuery5.Close;//必须在......
  • Docker 导出容器到 docker-compose.yml 文件
    Docker导出容器到docker-compose.yml 文件问题:docker-compose.yml文件丢失解决办法:docker的事用docker解决背景:很多容器都是dockerrun运行的,想要转换为docker-compose.yml1.测试备份:dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sockdockerproxy.com/re......
  • 寻找旋转排序数组中的最小值
    153FindMinimuminRotatedSortedArray问题描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。示例1:输入:[3,4,5,1,2]输出:1示例2:输入:[4,5,6,7,0,1,2]输出:0/**......
  • 在排序数组中查找元素的第一个和最后一个位置
    34FindFirstandLastPositionofElementinSortedArray问题描述:给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(logn)级别。如果数组中不存在目标值,返回[-1,-1]。示例1:输入:n......
  • 搜索旋转排序数组
    33SearchinRotatedSortedArray问题描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你......
  • 归并排序
    #include<iostream>#include<stdio.h>usingnamespacestd;constintN=10e6+10;intn;intq[N],tmp[N];voidmerge_sort(intq[],intl,intr){if(l>=r)return;intmid=(l+r)/2;//找到分界点merge_sort(q,l,mid);......
  • 强连通分量(SCC,Strongly Connected Components)学习笔记 & edited in 2024.01.31
    更新日志upd2024.01.31写好文章基本内容upd2024.01.31发表于洛谷upd2024.02.01同步发表于CSDNupd2024.02.01同步发表于博客园cnblogs强连通分量(SCC,StronglyConnectedComponents)定义强连通有向图(DAG)中若其中两点$x$,$y$能彼此到达(不一定是直接连边),称$x$和......
  • @Repeatable(ComponentScans.class)
    @Repeatable 是 Java 8 引入的一个元注解,用于标注某个注解可以在同一个声明上多次使用。@Repeatable 注解的值是一个容器注解,该容器注解内部定义了一个注解数组,用于存放多次使用的注解。@Repeatable 是 Java 8 引入的一个元注解,它允许同一个注解在同一声明上被多次使用。......