细说C++中的sort 函数

我们在算法程序中用的最多的函数就行sort,但经常会忘记如何写比较函数,这里详细做个总结。

1) C++中sort函数的原型

default (1)
template <class RandomAccessIterator>
  void sort (RandomAccessIterator first, RandomAccessIterator last);
custom (2)
template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

包含RandomAccessIterator迭代器,自定义的包含Compare函数类;

2) Compare 函数类

Compare 函数类来对元素进行比较,实现排序;因此有以下三种方式来实现Compare类

1. 元素自身包含了比较关系,如int,double等基础类型,可以直接进行比较

greater<int>() 递减, less<int>() 递增,用伪函数可以实现;还包含

2. 元素本身为class或者struct,类内部需要重载< 运算符,实现元素的比较;

注意事项:bool operator<(const className & rhs) const;  如何参数为引用,需要加const,这样临时变量可以赋值;重载operator<为常成员函数,可以被常变量调用;

3. 类外实现,用bool (*) ( EleType a1,EleType a2)  或者 bool (*) (const EleType & a1, const EleType & a2)

4. 函数类实现, 在类中重载()操作符

struct Info {
int val;
Info(int _val):val(_val) {}
bool operator<(Info rhs) const {
return val > rhs.val;
}
};
struct Cmp{
bool operator()(Info a1,Info a2) const {
return a1.val > a2.val;
}
};
bool cmp( Info a1, Info a2) {
 return a1.val < a2.val;
}

时间: 2024-10-25 13:14:24

细说C++中的sort 函数的相关文章

(转)Python3:sorted()函数及列表中的sort()函数

Python3:sorted()函数及列表中的sort()函数 转载请注明作者和出处:http://blog.csdn.net/u011475210 操作系统:WINDOWS 10 软件版本:python-3.6.2-amd64 编??者:WordZzzz 一.sort,sorted函数介绍: ??Sort函数是list列表中的函数,而sorted可以对list或者iterator进行排序. ??下面我们使用help来查看他们的用法及功能: sort: >>> help(list.sor

C++中的sort函数

(一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高! (二)c++标准库里的排序函数的使用方法 I)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可! II)Sort函数有三个参

C中的qsort函数和C++中的sort函数的理解与使用

一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); 参数解释:1.待排序数组首地址:2.数组中待排序元素数量:3.各元素的占用空间的大小:4.指向函数的指针,用于确定排序的顺序. 说明:qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,时间复杂度为O(n*logn). qsort要求提供比较函数用来确定排序

java中的Sort函数,你值得看

基于C语言中的sort如此这么方便,自然而然,java中也有类似C的sort函数. 1.普通数组:Arrays.sort(数组名,开始位置,结束位置). 2.类中属性排序: 模板: class A { int n; } class cmp implement Comparator<A> { 升序: public int compare(A a,A b) { if(a.n < b.n) { return 1; } else if(a.n == b.n) return 0; else ret

C++中得sort函数的比较函数(第三个参数)为什么要声明为static

sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错. 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数.静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问.同时静态成员函数不可以调用类的非静态成员. 原文地址:https://www.cnblogs.com/inception6-lxc/p/8446731.html

linux内核中的排序接口--sort函数

linux内核中的sort函数,事实上跟我们所说的qsort函数非常像,我们来看看qsort: qsort 的函数原型是 void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 參数:  1 .待排序数组首地址 2 .数组中待排序元素数量 3 .各元素的占用空间大小 4 .指向函数的指针.用于确定排序的顺序. 当中compare函数应写为: 1 2 3 4 int c

C++ STL的sort 函数 以及自定义的比较函数

没什么特别擅长的内容,先做个小笔记好了.在编程时,使用C++的标准模板库(STL)能节约工作量,增加代码的可读性,能灵活运用无疑会提高编程的效率,俗话说:Write less, create more ~ 然后这篇笔记就简单讨论一下sort函数吧.对于vector,我们使用algorithm头文件中的sort函数来排序元素,如果元素类型是实数.字符串之类的,直接使用sort 函数就可以方便的排序了.使用方法就是: #include <vector> #include <algorithm

实战c++中的vector系列--使用sort算法对vector&lt;unique_ptr&lt;string&gt;&gt;进行排序(sort函数出错“应输入 2 个参数,却提供了 3 个)

之前博客写了对vector使用sort算法进行的排序,之前也写到过vector<unique_ptr<string>>的一些处理方法. 今天就写一下对vector<unique_ptr<string>>使用sort算法进行排序. #include<iostream> #include<string> #include<vector> #include<algorithm> #include<memory&

PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析

在php中自带了大量了数组排序函数,下面我们一一来介绍一下关于php数组排序的用法吧. sort() 函数用于对数组单元从低到高进行排序. rsort() 函数用于对数组单元从高到低进行排序. asort() 函数用于对数组单元从低到高进行排序并保持索引关系. arsort() 函数用于对数组单元从高到低进行排序并保持索引关系. ksort() 函数用于对数组单元按照键名从低到高进行排序. krsort() 函数用于对数组单元按照键名从高到低进行排序. sort() PHP sort() 函数用