自定义数据类型(例如上述Student),如何使用max_element( )、min_element( )、max( )、min( )等算法?
时间: 2023-08-01 08:07:03 浏览: 34
使用STL算法对自定义类型进行操作,需要满足两个条件:
1. 自定义类型需要支持迭代器,可以通过定义begin()和end()函数来实现。
2. 自定义类型需要支持比较运算符,如<、>、==等。
以struct Student为例,我们可以这样定义begin()和end()函数:
```
struct Student {
int id;
string name;
bool operator<(const Student& rhs) const {
return id < rhs.id;
}
};
vector<Student> students = {{1, "Alice"}, {2, "Bob"}, {3, "Charlie"}};
vector<Student>::iterator begin(vector<Student>& v) {
return v.begin();
}
vector<Student>::iterator end(vector<Student>& v) {
return v.end();
}
```
这样,我们就可以使用STL算法对Student进行操作了。例如,可以使用max_element()算法找到id最大的学生:
```
auto max_student = *max_element(students.begin(), students.end());
```
也可以使用max()函数找到id最大的学生:
```
auto max_student = max({students[0], students[1], students[2]});
```
需要注意的是,使用max()函数时需要将自定义类型放入花括号中,因为max()函数的参数是可变长度的。
类似地,我们也可以使用min_element()算法和min()函数找到id最小的学生。