📜  c++ 设置比较器 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:49.619000             🧑  作者: Mango

C++设置比较器

在C++中,可以使用比较器来对自定义数据类型进行比较排序,而不仅仅是对普通的数据类型(如int,string等)进行比较排序。

什么是比较器?

在C++中,比较器指的是一个自定义的函数或结构体,用于对两个自定义数据类型进行比较,然后返回一个bool值,表示两个比较的对象的大小关系。

为什么需要比较器?

我们在C++中可以使用std::sort等函数来对一组数据进行排序,对于普通的数据类型(如int,string等),可以直接使用这些函数来完成排序。但是对于自定义的数据类型,我们需要自定义比较规则才能进行排序。

如何设置比较器?

我们可以通过编写一个自定义的比较函数或比较结构体来设置比较器。下面是一个使用比较函数设置比较器的例子:

bool cmp(int a, int b) {
  return a > b; // 返回a是否大于b
}

int main() {
  vector<int> nums = {5, 1, 3, 2, 4};
  sort(nums.begin(), nums.end(), cmp); // 使用cmp函数进行排序
  for(int i = 0; i < nums.size(); i++) {
    cout<<nums[i]<<" ";
  }
  return 0;
}

上述例子中,我们编写了一个自定义的比较函数cmp,用于判断两个整数之间的大小关系,然后使用std::sort函数将vector中的元素按照cmp的规则进行排序,最后输出结果。

我们也可以使用比较结构体来进行比较排序,其代码如下:

struct Person {
  string name;
  int age;
  bool operator < (const Person& rhs) const {
    return age < rhs.age; // 根据年龄进行排序
  }
};

int main() {
  vector<Person> people = {{"Alice", 18}, {"Bob", 20}, {"Charlie", 10}};
  sort(people.begin(), people.end()); // 自动调用Person结构体内部的小于号操作符
  for(int i = 0; i < people.size(); i++) {
    cout<<people[i].name<<" "<<people[i].age<<endl;
  }
  return 0;
}

上述例子中,我们定义了一个Person结构体,表示一个人的姓名和年龄。然后,我们重载了小于号操作符(operator<),根据年龄对Person进行排序。

最后,我们使用sort对vector进行了排序。

总结

在C++中,我们可以使用比较器对自定义数据类型进行排序。比较器可以是一个自定义的比较函数或比较结构体。通过自定义的比较器,我们可以对自定义的数据类型进行排序,使得排序适用于更多的场景。