C++对vector排序

解决方案

使用 std::sort() 函数对 vector 进行排序,该函数在 algorithm 头文件中

方式:

  1. 基本数据类型
  2. 自己定义的类型

示例

  1. 基本数据类型

    直接比较即可

    //此处为头文件
    void test01() {
        std::vector<int> vInt{ 1, 2, 3, 4, 5 };
        std::sort(vInt.begin(), vInt.end()); //升序
        std::sort(vInt.rbegin(), vInt.rend()); //降序
    }
    
  2. 自己定义的类型

    示例:

    class Person {
    public:
        int age;
        string name;
        Person(int age = 0, string name = "张三") : age{ age }, name{ name } {}
    }
       
    Person p[] = { { 11, "hhh" }, { 22, "xxx" }, { 22, "www" } };
    

    编译器不知道Person类型如何相互比较,要提供函数告诉编译器如何比较两个函数

    有两种方式

    1. 重载小于运算符

      //此处为头文件
      bool Person::operator<(Person &p) { //重载小于运算符
          return (this->age < p.age ? true : (this->name < p.name));
      }
      void test02() {
          std::vector<Person> vPerson;
          for (int i{ 0 }; i < 3; ++i) {
          	vPerson.push_back(p[i]);
          }
          std::sort(vPerson.begin(), vPerson.end()); //升序
          std::sort(vPerson.rbegin(), vPerson.rend()); //降序
      }
      
    2. 提供比较函数

      当vector的参数类型是指针时,重载小于运算符无法比较两个指针所指向的内容的大小

      此时可以提供比较函数

      //此处为头文件
      bool cmp(Person *p1, Person *p2) { //提供比较函数
          return (p1->age < p2->age ? true : (p1->name < p2->name));
      }
      void test03() {
          std::vector<Person *> vPerson;
          for (int i{ 0 }; i < 3; ++i) {
          	vPerson.push_back(p+i);
          }
          std::sort(vPerson.begin(), vPerson.end(), cmp); //升序
          std::sort(vPerson.rbegin(), vPerson.rend(), cmp); //降序
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值