2 hchchc6016 hchchc6016 于 2016.03.28 02:04 提问

sort函数的第三个参数有什么用

sort函数原先是升序排列为什么加入一个人自己定义的compare函数之后就会降序了呢?小白愚钝,希望大神讲得详细一点,不胜感激图片

4个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.28 09:48
已采纳

排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较(compare)函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。
比较时sort函数根据comp函数进行判断输的大小,系统默认ab时返回为真,那么最终得到的排序结果也相应的从小到大变成从大到小。

caozhy
caozhy   Ds   Rxr 2016.03.28 06:01

这很容易理解,对于排序函数来说,总是从小到大排序,但是你的compare函数改变了对于大小的定义,把大视作小,把小视作大,那么排序函数按照你的新的定义还是从小到大排序,实际上就是从大到小排序了。

lx624909677
lx624909677   Ds   Rxr 2016.03.28 14:08

是排序规格,比如要对一个包含ID和name的结构体对象进行按ID大小排序,这个时候就需要用到第三个参数了,也就是自己写的排序规则函数

CSDNXIAOC
CSDNXIAOC   2016.03.30 11:27

在写poj2421之前看了别人的代码,里面这段我开始不明白!!
“sort(amount,amount+counter,cmp);”
 
下面这段代码是我在别处摘抄的,希望之前不明白的朋友能仔细的看看。
 
 
 
sort的第三个参数,一直是用仿函数,没有想到用函数指针也可以!
sort的第三个参数可以用函数指针也可......
答案就在这里:sort函数中的第三个参数
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
sort函数的第三个参数cmp
sort 函数的第三个参数 cmp
sort函数中三个参数的用法
1、sort函数一般只对数组元素排序,而且必须知道地址。如对a[0]到a[n-1]共n个元素进行排序,用sort(ar,ar+n)。其中n可以为1,即对一个元素也可以使用sort函数。 2、可以有如下两种形式:1、void sort(int *first,int *last); //将数组按升序排序 2、void sort(int *first,int *last,bool cmp);
sort函数中的第三个参数
在写poj2421之前看了别人的代码,里面这段我开始不明白!!“sort(amount,amount+counter,cmp);” 下面这段代码是我在别处摘抄的,希望之前不明白的朋友能仔细的看看。   sort的第三个参数,一直是用仿函数,没有想到用函数指针也可以!sort的第三个参数可以用函数指针也可以用仿函数。用函数指针如下:bool str_cmp(const
sort对第三个参数的使用
template void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val, _Compare __comp) { _RandomAccessIter __next = __last; --__next; while (__comp(__val, *__next)
STL sort函数简介
做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。    这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简
stl中sort函数详解
1. sort 函数的形式: sort(first_pointer,first_pointer+n,cmp)         函数的第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。第二个参数相对较好理解,即首地址加上数组的长度n。最后一个参数是比较函数的名称(一般比较函数名字都用cmp,当然这个名字是什么都所谓),这个比较函数可以不写,即第三个参数可以缺省。此时s
addEventListener() 关于第三个参数
addEventListener() 事件监听 removeEventListener() 移除事件监听 语法 element.addEventListener(event, function, useCapture); 第一个参数是事件的类型 (如 “click” ). 第二个参数是事件触发后调用的函数 第三个参数是个布尔值。默认是false(冒泡阶段执行)true(捕获阶段产生)...
addEventListener第三个参数作用
DOM方法 addEventListener() 和 removeEventListener()是用来分配和删除事件的函数。 这两个方法都需要三个参数,分别为: 事件名称(String)、要触发的事件处理函数(Function)、指定事件处理函数的时期或阶段(boolean)。 DOM事件流如图(剪自javascript高级程序设计,懒的画了): 由图可知捕获过程
关于sort的比较函数的static 声明
在进行编写sort函数的比较函数时,      bool compare(string str1,string str2){         string comp1=str1+str2;         string comp2=str2+str1;                  return comp1     } 只是简单的外部声明,也没有类的引用,在VS上运行时正确,但
事件阶段
common.jsfunction  my$(id) {    return  document.getElementById(id);}<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title&amp