C++ .sort

C++ .sort,第1张

C++ .sort()重载
  1. 头文件

    #include
    
  2. .sort()函数参数

    void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
    
    // first:要排序的数组的起始地址;
    // last:要排序的数组的结束地址;
    // comp:排序的方法,默认是从小到大 - 升序;
    
  3. 实例

    // *** 实例1:自定义cmp实现从大到小排序 ***
    #include
    #include
    using namespace std;
    bool cmp(int a,int b);
    main(){
       //sort函数第三个参数自己定义,实现从大到小 
       int a[]={45,12,34,77,90,11,2,4,5,55};
       sort(a,a+10,cmp);
       for(int i=0;i<10;i++)
         cout
    // *** 实例2:自定义cmp实现结构体比较 ***
    #include
    #include
    using namespace std;
    
    // 写法1:
    struct Student {	// 结构体
    	char name[20];
    	int math;
    	int english;	
    } stu1; // 直接赋值了stu1;
    // 写法2:定义结构体student为Student(实际上是把struct student换了一种叫法,新的叫法为Student)
    //typedef struct student {
    //	char name[20];
    //	int math;
    //	int english;
    //}Student;
    
    bool cmp(Student a, Student b) {
    	if (a.math > b.math)
    		return a.math < b.math;		  //按math从小到大排序 
    	else if (a.math == b.math)
    		return a.english > b.english; //若math相等,按endlish从大到小排序
    }
    
    int main() {
    	//先按math从小到大排序,math相等,按english从大到小排序 
    	Student a[4] = { {"apple",67,89},{"limei",90,56},{"apple",90,99} };
    	sort(a, a + 3, cmp);
    	for (int i = 0; i < 3; i++)
    		cout << a[i].name << " " << a[i].math << " " << a[i].english << endl;
    	cout << stu1.math << endl;
    }
    

    补充:

    // *** 1.对于容器,容器中的数据类型可多样化 ***
    // 元素本身包含了比较关系,比如 int,double 等基础类型,可以直接进行比较greater()递减,less()递增
    sort(arr.begin(),arr.end(),greater()); // 实现从大到小排序
    
    // *** 2.对于元素本身为class或者struct,类内部需要重载运算符,实现元素的比较 ***
    // bool operator<(const className & rhs) const; 参数为引用,需要加const,这样临时变量可以赋值;重载operator为常成员函数,可以被常变量调用; 
    typedef struct student {
    	char name[20];
    	int math;
    	// 按math从大到小排序 
    	// 重载 < 方法1:
    	// bool operator<(const className & rhs) const; 参数为引用,需要加const,这样临时变量可以赋值;重载operator为常成员函数,可以被常变量调用;
    	// inline:内联函数,解决频繁调用的函数大量消耗栈空间内存的问题
    	inline bool operator < (const student & x) const {
    		return math > x.math;
    	}
    }Student;
    // 重载也可以定义为如下格式:
    struct Cmp {
    	bool operator()(Info a1, Info a2) const {
    		return a1.val > a2.val;
    	}
    };
    

参考文献

https://blog.csdn.net/chongchujianghu3/article/details/105152147

https://blog.csdn.net/zhangyikuaile/article/details/114684470

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/607810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-14
下一篇 2022-04-14

发表评论

登录后才能评论

评论列表(0条)