如何重载max_element( )
时间: 2023-12-20 17:15:57 浏览: 126
`std::max_element()` 是一个函数模板,可以通过重载运算符来改变最大值的判断方式。
例如,如果要对一个自定义的结构体类型 `Person` 的序列进行最大值查找,可以重载 `<` 运算符来定义比较方式:
```c++
struct Person {
std::string name;
int age;
bool operator<(const Person& other) const {
return age < other.age; // 按照年龄比较大小
}
};
int main() {
std::vector<Person> people = {{"Alice", 20}, {"Bob", 30}, {"Charlie", 25}};
auto max_person = std::max_element(people.begin(), people.end());
std::cout << "The oldest person is " << max_person->name << ", " << max_person->age << " years old." << std::endl;
return 0;
}
```
在上面的例子中,我们定义了一个结构体 `Person`,其中包含姓名和年龄两个字段。我们重载了 `<` 运算符,按照年龄比较两个 `Person` 对象的大小。然后我们使用 `std::max_element()` 对 `people` 序列进行最大值查找,由于我们定义了 `<` 运算符,因此它会按照年龄大小进行比较,找出最大年龄的 `Person` 对象。
当然,我们也可以使用函数对象或者函数指针来改变比较方式。例如:
```c++
struct PersonAgeLess {
bool operator()(const Person& p1, const Person& p2) const {
return p1.age < p2.age;
}
};
int main() {
std::vector<Person> people = {{"Alice", 20}, {"Bob", 30}, {"Charlie", 25}};
auto max_person = std::max_element(people.begin(), people.end(), PersonAgeLess());
std::cout << "The oldest person is " << max_person->name << ", " << max_person->age << " years old." << std::endl;
return 0;
}
```
在上面的例子中,我们定义了一个函数对象 `PersonAgeLess`,它重载了 `()` 运算符,按照年龄比较两个 `Person` 对象的大小。然后我们使用 `std::max_element()` 对 `people` 序列进行最大值查找,把 `PersonAgeLess()` 作为第三个参数传递进去,表示使用 `PersonAgeLess` 作为比较方式。
阅读全文