當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ Algorithm max_element()用法及代碼示例


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_element()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。