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
1720

被折叠的 条评论
为什么被折叠?



