Sort排序函数(c++)

sort函数基本用法

C++中的sort函数是库中的一个函数,用于对容器中的元素进行排序。它的基本用法如下:

//c++排序函数sort
#include <algorithm>
#include <vector>
#include <iostream>

int main() {
	vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
	
	// 使用默认的比较函数(升序)对vec进行排序
	std::sort(vec.begin(), vec.end());
	
	// 输出排序后的vec
	for (int num : vec) {
		std::cout << num << " ";
	}
	
	return 0;
}

调用函数sort(vec.begin(), vec .end(), less<>() ) ;其中第一个参数时数组的起始元素,第二个参数为结束的元素。第三个参数可省略,默认为less<>(),此时是升序的排序。如果需要降序排序,需要写第三个参数为greater<>().

利用sort函数对结构体内元素进行排序

在C++中,sort函数是一个通用的排序函数,可以对多种数据类型进行排序,包括简单的基本类型如int,也包括复杂的数据类型如结构体。当我们使用sort函数对结构体类型数据进行排序时,就需要提供一个自定义的比较函数,例如compare。这是因为sort函数本身无法确定如何比较两个结构体的大小。

基本数据类型如int在内存中只有单一的数值含义,因此默认的比较规则是按照数值大小进行比较。而结构体是由不同类型的数据组合成的一个整体,例如一个学生的姓名、年龄和分数等。这些数据在内存中是分别存储的,因此需要我们指定如何从这个结构体中取出特定的成员来进行比较。这就是为什么我们需要提供一个自定义的比较函数来告诉sort函数如何比较两个结构体的原因。

//c++中使用sort函数(结构体)
#include <iostream>
#include <vector>
#include <algorithm>

struct Student {
	int id;
	std::string name;
};

bool compare(const Student &a, const Student &b) {
	return a.id < b.id;
}

int main() {
	std::vector<Student> students = {
		{3, "张三"},
		{1, "李四"},
		{2, "王五"}
	};
	
	std::sort(students.begin(), students.end(),compare);
	
	for (const auto &student : students) {
		std::cout << "ID: " << student.id << ", Name: " << student.name << std::endl;
	}
	
	return 0;
}

                                        使用sort函数对结构体类型数据进行排序

总的来说,普通的int类型数据和结构体类型数据在使用sort函数进行排序时的主要区别在于:对于int类型,系统可以直接根据其数值大小进行默认的比较;而对于结构体类型,由于其中可能包含多个不同类型的成员,系统无法默认其比较规则,因此需要用户自定义一个比较函数来指定排序规则。

所以,若比较的类型是结构体,函数参数中的compare函数不可以省略。

在C++中,当我们使用sort函数对结构体类型数据进行排序时,需要提供一个自定义的比较函数,这个比较函数通常命名为compare或者Comparator,其参数为两个待比较的结构体变量,返回值为bool类型

bool compare(const Student &a, const Student &b) {
	return a.id < b.id;
}

                                                        comapre函数

通过编写compare函数,我们可以指定如何从结构体中取出特定的成员来进行比较,从而完成对结构体类型的排序。例如,如果我们想要按照结构体中的某个成员进行升序排序,可以在compare函数中将该成员的值进行比较;如果要按照另一个成员进行降序排序,则可以在compare函数中将该成员的值取反后再进行比较。

其余注意事项:

在使用C++中的sort函数时,需要注意以下几点:

1、比较函数:sort函数默认使用升序排序,如果需要降序排序,则需要自定义比较函数或者使用lambda表达式。

2、稳定性:sort函数是稳定的排序算法,即相等元素的相对位置不会改变。如果需要不稳定的排序算法,可以使用nth_element函数。

3、复杂度:sort函数的时间复杂度为O(nlogn),其中n为待排序序列的长度。因此,对于较大的序列,需要考虑性能问题。

4、原地排序:sort函数会修改原始序列,而不是创建一个新的已排序序列。如果需要保留原始序列,则可以使用stable_sort函数。

                                                                                                                        ---end

                                                                                                                   2024.1.18 23;35

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值