std::min_element
时间: 2023-12-13 20:06:09 浏览: 75
`std::min_element` 是 C++ STL 中的一个函数,它用于查找迭代器范围内的最小值,并返回指向该最小值的迭代器。
例如,对于一个 vector<int> v,若要查找 v 中的最小值,则可以使用以下代码:
```c++
auto min_it = std::min_element(v.begin(), v.end());
```
其中,`v.begin()` 和 `v.end()` 分别是指向 v 的开头和结尾的迭代器。`min_it` 是一个指向最小值的迭代器,可以通过 `*min_it` 获得最小值。
`std::min_element` 还可以接受一个可调用对象,用于自定义比较规则。例如,若要查找 v 中绝对值最小的值,则可以使用以下代码:
```c++
auto abs_min_it = std::min_element(v.begin(), v.end(), [](int a, int b) {
return std::abs(a) < std::abs(b);
});
```
其中,`[](int a, int b) { return std::abs(a) < std::abs(b); }` 是一个 lambda 函数,用于定义比较规则。
相关问题
std::min_element,自定义比较函数
`std::min_element`是C++标准库中的一个算法,它用于找到容器(如数组、向量或迭代器范围)中最小元素的迭代器。这个函数接受一个范围以及一个可选的比较函数作为参数。如果没有提供比较函数,那么默认会使用`<`操作符来进行比较。
例如,如果你有一个整数向量`v`,你可以这样做:
```cpp
int* minIndex = std::min_element(v.begin(), v.end());
```
这将返回指向`v`中最小元素的第一个元素的指针。如果你想基于某个自定义条件找出最小值,可以传递一个比较函数。比如,如果你有一个结构体,想要找到第一个`age`属性最小的对象,可以这样定义比较函数:
```cpp
struct Person {
int age;
// ...其他成员...
};
bool compareByAge(const Person& a, const Person& b) {
return a.age < b.age;
}
auto minPerson = std::min_element(persons.begin(), persons.end(), compareByAge);
```
在这里,`compareByAge`是一个接受两个`Person`对象并返回布尔值的函数,如果前一个对象的年龄小于后一个对象,则返回`true`,表示前一个是更小的那个。
std::min_element 有没有获取最大值得算法
`std::min_element` 函数是用来查找容器中最小值的,它返回指向容器中最小元素的迭代器。如果要获取容器中的最大值,可以使用 `std::max_element` 函数,它返回指向容器中最大元素的迭代器。
如果同时需要获取最小值和最大值,可以使用 `std::minmax_element` 函数,它返回一个 `std::pair` 对象,其中 `first` 成员是指向最小元素的迭代器,`second` 成员是指向最大元素的迭代器。例如:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v {3, -1, 5, 2, 8, 4};
auto minmax = std::minmax_element(v.begin(), v.end());
std::cout << "Min element: " << *minmax.first << std::endl;
std::cout << "Max element: " << *minmax.second << std::endl;
return 0;
}
```
输出结果为:
```
Min element: -1
Max element: 8
```
这里使用了 `auto` 关键字推导出了 `std::pair` 类型的变量 `minmax`。通过 `minmax.first` 和 `minmax.second` 可以访问到最小元素和最大元素的迭代器。
阅读全文