C++ 算法 max_element() 返回一个迭代器,该迭代器指向范围 [first, last) 中具有最大值的元素。如果多个元素满足此条件,则返回的迭代器将指向此类元素中的第一个。
对于第一个版本使用运算符 < 比较元素,或者对于第二个版本使用给定的二进制比较函数 comp 比较元素。
用法
default (1) template <class ForwardIterator>
ForwardIterator max_element (ForwardIterator first, ForwardIterator last)
custom (2) template <class ForwardIterator, class Compare>
ForwardIterator max_element (ForwardIterator first, ForwardIterator last,
Compare comp);
参数
first:一个输入迭代器,将位置指向要搜索的最大元素的范围中的第一个元素。
last:一个输入迭代器,将位置指向要搜索的最大元素的范围中的最后一个元素。
comp: 一个用户定义的二元谓词函数,它接受两个参数,如果两个参数按顺序返回真,否则返回假。它遵循严格的弱排序来对元素进行排序。
返回值
如果范围为空,则返回范围 [first, last) 或 last 中的较大值。
复杂度
复杂性是线性的,比所比较的元素数量少一个。
数据竞争
访问范围 [first, last) 中的对象。
异常
如果任何比较引发异常,则此函数将引发异常。
请注意,无效参数会导致未定义的行为。
例子1
让我们看一个简单的例子来找到范围内最大元素的位置:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v{3, 2, 4, 1, 5, 9};
vector<int>::iterator result = max_element(begin(v), end(v));
cout << "max element at position:" << distance(begin(v), result);
return 0;
}
输出:
max element at position:5
例子2
让我们看另一个使用默认版本查找范围内最大元素的简单示例:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int v[] = { 'a', 'c', 'k', 'd', 'e', 'f', 'h' };
// Finding the maximum value between the first and the
// fourth element
int* i1;
i1 = max_element(v, v + 4);
cout <<"Maximum value is:" <<char(*i1) << "\n";
return 0;
}
输出:
Maximum value is:k
例子3
让我们看另一个使用比较函数查找范围内最大元素的简单示例:
#include <iostream>
#include <algorithm>
using namespace std;
// Defining the BinaryFunction
bool comp(int a, int b)
{
return (a < b);
}
int main()
{
int v[] = { 9, 4, 7, 2, 5, 10, 11, 12, 1, 3, 6 };
// Finding the minimum value between the third and the
// ninth element
int* i1;
i1 = max_element(v + 2, v + 9, comp);
cout << "Maximum element is:"<<*i1 << "\n";
return 0;
}
输出:
Maximum element is:12
示例 4
让我们看另一个简单的例子:
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
using namespace std;
bool compare(pair <string, int> p, pair <string, int> q )
{
return p.second < q.second;
}
void print(const vector <int>& v)
{
vector <int>::const_iterator i;
for(i = v.begin(); i != v.end(); i++)
{
cout << *i << " ";
}
cout << endl;
}
void fun(pair <string, int> p)
{
cout << p.first << "\t" << p.second << endl;
}
int main()
{
int arr[] = {10, 20, 30, 50, 40, 100, 70, 60, 80, 90};
vector <int> v(arr, arr + sizeof(arr)/sizeof(int));
map <string, int> marks;
pair <string, int> max;
marks["Nikita"] = 60;
marks["Amita"] = 99;
marks["Kashish"] = 90;
marks["Divya"] = 80;
cout << "max_element() without predicate " << endl;
cout << "Vector:";
print(v);
cout << "Maximum element = "
<< *max_element(v.begin(), v.end())
<< endl;
cout << "\nmax_element() with predicate" << endl;
cout << "Name\tMarks" << endl;
for_each(marks.begin(), marks.end(), fun);
max = (*max_element(marks.begin(), marks.end(), compare));
cout << "Person with maximum marks = " << max.first
<< ", Marks = " << max.second << endl;
return 0;
}
输出:
max_element() without predicate Vector:10 20 30 50 40 100 70 60 80 90 Maximum element = 100 max_element() with predicate Name Marks Amita 99 Divya 80 Kashish 90 Nikita 60 Person with maximum marks = Amita, Marks = 99
相关用法
- C++ Algorithm max()用法及代码示例
- C++ Algorithm make_heap()用法及代码示例
- C++ Algorithm minmax()用法及代码示例
- C++ Algorithm minmax_element()用法及代码示例
- C++ Algorithm min()用法及代码示例
- C++ Algorithm merge()用法及代码示例
- C++ Algorithm min_element()用法及代码示例
- C++ Algorithm remove_if()用法及代码示例
- C++ Algorithm remove()用法及代码示例
- C++ Algorithm set_union()用法及代码示例
- C++ Algorithm next_permutation()用法及代码示例
- C++ Algorithm upper_bound()用法及代码示例
- C++ Algorithm remove_copy_if()用法及代码示例
- C++ Algorithm random_shuffle()用法及代码示例
- C++ Algorithm pop_heap()用法及代码示例
- C++ Algorithm replace()用法及代码示例
- C++ Algorithm set_intersection()用法及代码示例
- C++ Algorithm lower_bound()用法及代码示例
- C++ Algorithm transform()用法及代码示例
- C++ Algorithm set_difference()用法及代码示例
注:本文由纯净天空筛选整理自 C++ Algorithm max_element()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。