21xrx.com
2024-12-22 22:07:57 Sunday
登录
文章检索 我的文章 写文章
C++ Vector 自定义排序
2023-07-05 06:49:07 深夜i     --     --
排序算法 函数指针 运算符重载 Lambda表达式 STL容器

在C++语言中,vector是非常常用的一个容器类型,它在实现动态数组的同时也提供了许多实用的成员函数,如排序函数sort()。但是在某些情况下,我们可能需要自定义排序规则来满足实际需求。

举个例子,我们有一个存储学生信息的vector,其中每个元素是一个结构体,包含学生的姓名和年龄。如果我们希望按照年龄从小到大的顺序排序,我们可以定义一个比较函数,然后将其作为参数传递给sort()函数。

下面是一个示例代码:


struct Student

  std::string name;

  int age;

;

bool cmp(Student a, Student b)

  return a.age < b.age;

int main()

{

  std::vector<Student> students{"Tom", "Mary", "John"};

  std::sort(students.begin(), students.end(), cmp);

  // 打印排序后的结果

  for(std::vector<Student>::iterator it = students.begin(); it != students.end(); it++)

  

    std::cout << it->name << " : " << it->age << std::endl;

  

  return 0;

}

在上面的代码中,我们首先定义了一个结构体Student来存储学生信息,然后定义了一个比较函数cmp,该函数接收两个参数a和b,分别表示待比较的两个学生对象。在函数体内,我们按照年龄从小到大的顺序来排序,也就是说如果a的年龄小于b的年龄,函数返回true,否则返回false。最后我们使用std::sort()函数来对学生信息进行排序,将cmp函数作为第三个参数传递给sort()函数。

运行上面的代码,可以得到如下的输出结果:


John : 18

Tom : 19

Mary : 20

可以看到,按照年龄从小到大的顺序,John排在了第一位,Mary排在了最后一位。

除了自定义比较函数外,还可以使用lambda表达式来实现自定义排序规则,如下所示:


std::sort(students.begin(), students.end(), [](Student a, Student b)

  return a.age < b.age;

);

lambda表达式的语法非常简洁,使用起来也十分方便。上述代码表示按照年龄从小到大的顺序对学生信息进行排序。

总结一下,C++ vector的sort()函数提供了默认的排序规则,但是在某些情况下可能需要自定义排序规则。通过传递自定义的比较函数或者lambda表达式给sort()函数,我们可以方便地实现自定义排序规则。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复