2 qq 33555452 qq_33555452 于 2016.02.23 23:14 提问

c++中 算法sort带 谓词的怎么回事
c++

请大神详细解释一下这个带谓词的sort算法的使用与规则 c++中 算法sort带 谓词的怎么回事 大神求帮助

3个回答

caozhy
caozhy   Ds   Rxr 2016.02.23 23:24
已采纳
 简单来说,就是用一个函数指针传一个自己写的比较函数,告诉sort你的排序规则。从而实现按照特定方式(比如结构体排序按照某个字段排序,或者升序降序排序,或者字符串排序按照ascii顺序还是按照长度)排序。

比如
int cmp(const void * a, const void * b)
{
    return *(int *)a - *(int *)b;
}
main()
{
    int arr[] = ...
        qsort(arr, n, sizeof(int), cmp);
}
这个程序按照升序排序
如果
int cmp(const void * a, const void * b)
{
    return *(int *)b - *(int *)a;
}
就是按照降序排序
如果
int cmp(const void * a, const void * b)
{
    int aa = abs(*(int *)a);
      int bb = abs(*(int *)b);
    return aa - bb;
}
就是按照绝对值排序

可见,你只要定义不同的cmp函数,就可以按照你的愿望排序
leilba
leilba 赞同,sort(start,end,cmp); 是最常用的用法,尤其是在对自定义类型结构体进行排序的时候,非常方便
2 年多之前 回复
VisualEleven
VisualEleven   Ds   Rxr 2016.02.24 14:58

就是提供一个回调的函数

qq_33555452
qq_33555452 谢谢解答
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.02.24 15:28

谓词就是一个函数对象等,表示排序的时候,sort函数会调用你这个函数来进行排序判断,也就是一个i动作,所以叫谓词

qq_33555452
qq_33555452 谢谢解答
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++ - 算法(algorithm) 的 谓词(predicate) 详解
算法(algorithm) 的 谓词(predicate) 详解   算法谓词, 即标准库算法传递的参数, 可以指定算法的操作, 如std::sort, 默认是从小到大, 通过谓词可以修改从大到小.   1. 函数(function)谓词 通过传递函数名, 匹配二元谓词(binary predicates), 根据函数提供的策略, 输出值; 代码: /*Function Predic
STL算法设计理念 - 二元函数,二元谓词以及在set中的应用
demo 二元函数对象 #include #include #include #include using namespace std; template class SumVector { public: T operator()(T t1, T t2) // 二元函数对象 { return t1 + t2; } protected: private: }; void
谓词实现sort的降排列数据
谓词听起来象英语中的谓语动词,但并不是这样,它是一个函数,返回bool结果的函数,这些函数在标准库中有很多用法。 都知道使用sort都是以升序排列值的,但如果要降序排列数据呢?函数sort充许提供一个谓词函数(called pred)用于比较项。 排序谓词函数必须满足以下条件: 1.pred(a,a)必须为false 2.如果pred(a,b)为true,且pred(,b,c)为true,
浅析STL 谓词 + 仿函数 + 函数指针(c)
一:起因 (0)提到C++ STL,首先被人想到的是它的三大组件:Containers(容器), Iterators(迭代器), Algorithms(算法)。容器为用户提供了常用的数据结构(如,vector,list,deque,stack,map,multimap,set,multiset,外加string),算法大多是独立于容器的常用的基本算法(一般在algorithm头文件中,其中sor
带有in谓词的子查询
--数据库基本表的创建,插入,删除,更新操作 --建立一个"学生"表 --学生的学号:Sno,类型是char(9)-->因为学生的学号是9位的定长的字符串; --学生的姓名:Sname,类型是varchar2(8)-->因此可以是2,3,4汉字,而本数据库中一个汉字对应两个字符; --学生的年龄:Sage,类型是smallint-->smallint占用的是两个字节,表示数的范围是,-32,768-
带有ANY(SOME)或ALL谓词的子查询
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词时则必须同时使用比较运算符。其语义为: >  ANY 大于子查询结果中的某个值 > ALL  大于子查询结果中的所有值 >=  ANY  大于等于子查询结果中的某个值 >= ALL  大于等于子查询结果中的所有值 = ANY 等于子查询结果中的某个值
嵌套查询 带有in谓词,比较运算符,any或all谓词的子查询
前言 1.      将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询 2.      上层的查询块叫外层查询或父查询或主查询,下层查询块又称为内层查询或子查询,sql语句允许多层嵌套查询! 3.      子查询的select语句不能使用order by子句,order by子句永远只能对最终(或外)查询结果排序 4.      嵌套查询的求解方
谓词与lambda表达式
谓词 谓词是一个可调用的表达式,其返回结果是一个能用作条件的值,一般作为算法重载的参数使用。STL中所使用的谓词分为两类: 一元谓词:只接受一个函数; 二元谓词:可以接受两个参数。 接受谓词参数的算法对输入序列中的元素调用谓词。因此,元素类型必须能转换为谓词参数类型。 例如: //比较函数,用来按长度排序单词 bool isShorter(const string &s1,const
C++ 中谓词是什么?
个人也是初学根本就不了解谓词是什么意思,通过下面的例子大家自己体会吧。 下面程序演示了count_if();该程序创建一个包含数字1-19的矢量,然后统计能够被3整除的元素个数。为了达到这个目的,程序首先创建了一个称为dividesby3()的一元谓词,如果谓词的参数能够被3整除,该谓词返回ture。 #include#include#includeusing na
#include<algorithm>中的sort算法
1、sort函数的时间复杂度为n*log2(n),执行效率较高。   2、sort函数的形式为sort(first,end,method)//其中第三个参数可选。   3、若为两个参数,则sort的排序默认是从小到大,见如下例子 #include #include using namespace std; int main() { int a[10]={