Как найти наибольшее значение вектора

В этом посте мы обсудим, как найти минимальное или максимальное значение в векторе на C++.

1. Использование std::max_element

The std::min_element а также std::max_element вернуть итератору минимальное и максимальное значение в указанном диапазоне соответственно. В следующем примере кода показан вызов обеих этих функций:

#include <iostream>

#include <vector>

#include <algorithm>

int main()

{

    std::vector<int> v = {2, 1, 3, 6, 7, 9, 8};

    int max = *max_element(v.begin(), v.end());

    int min = *min_element(v.begin(), v.end());

    std::cout << min << «, « << max << std::endl;        // 1, 9

    return 0;

}

Скачать  Выполнить код

 
Обе эти функции принимают бинарный предикат, который можно использовать для сравнения вектора объектов с использованием определенного поля, как показано ниже:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <iostream>

#include <vector>

#include <algorithm>

struct Person {

    std::string name;

    int age;

};

bool comp(Person const &lhs, Person const &rhs) {

    return lhs.age < rhs.age;

}

int main()

{

    std::vector<Person> v = {

        {«A», 10}, {«B», 15}, {«C», 12}, {«D», 14}

    };

    auto min = std::min_element(v.begin(), v.end(), comp);

    auto max = std::max_element(v.begin(), v.end(), comp);

    std::cout << «Minimum age object: (« << min->name << «, « << min->age << «)n»;

    std::cout << «Maximum age object: (« << max->name << «, « << max->age << «)n»;

    return 0;

}

Скачать  Выполнить код

результат:

Minimum age object: (A, 10)
Maximum age object: (B, 15)

2. Использование std::minmax_element

Лучшим вариантом является использование std::minmax_element функция для получения минимального и максимального количества элементов в контейнере. Он возвращает пару итераторов, первое и второе значения которых указывают на минимальный и максимальный элементы соответственно.

#include <iostream>

#include <vector>

#include <algorithm>

int main()

{

    std::vector<int> v = {2, 1, 3, 6, 7, 9, 8};

    auto it = std::minmax_element(v.begin(), v.end());

    int min = *it.first;

    int max = *it.second;

    std::cout << min << «, « << max << std::endl;        // 1, 9

    return 0;

}

Скачать  Выполнить код

 
Чтобы получить индекс элементов с максимальным или минимальным значением, примените арифметику указателя или вызовите std::distance функция.

#include <iostream>

#include <vector>

#include <algorithm>

int main()

{

    std::vector<int> v = {2, 1, 3, 6, 7, 9, 8};

    auto it = std::minmax_element(v.begin(), v.end());

    int min_idx = std::distance(v.begin(), it.first);

    int max_idx = std::distance(v.begin(), it.second);

    std::cout << min_idx << «, « << max_idx << std::endl;        // 1, 5

    return 0;

}

Скачать  Выполнить код

3. Использование пользовательской процедуры

Наконец, мы можем написать вашу собственную процедуру, чтобы найти минимальное и максимальное значение в векторе. Вот как будет выглядеть код:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

#include <iostream>

#include <vector>

#include <climits>

template<typename T>

int findMaximum(std::vector<T> const &vec) {

    int max = INT_MIN;

    for (const T &i: vec) {

        if (max < i) {

             max = i;

        }

    }

    return max;

}

template<typename T>

int findMinimum(std::vector<T> const &vec) {

    int min = INT_MAX;

    for (const T &i: vec) {

        if (min > i) {

             min = i;

        }

    }

    return min;

}

int main()

{

    std::vector<int> v = {2, 1, 3, 6, 7, 9, 8};

    int min = findMinimum(v);

    int max = findMaximum(v);

    std::cout << min << «, « << max << std::endl;        // 1, 9

    return 0;

}

Скачать  Выполнить код

Это все о поиске минимального или максимального значения в векторе в C++.

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования :)

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a vector, find the minimum and maximum element of this vector using STL in C++. Example:

    Input: {1, 45, 54, 71, 76, 12}
    Output: min = 1, max = 76
    
    Input: {10, 7, 5, 4, 6, 12}
    Output: min = 1, max = 76

    Approach:

    • Min or Minimum element can be found with the help of *min_element() function provided in STL.
    • Max or Maximum element can be found with the help of *max_element() function provided in STL.

    Syntax:

    *min_element (first_index, last_index);
    
    *max_element (first_index, last_index);

    Below is the implementation of the above approach: 

    CPP

    #include <bits/stdc++.h>

    using namespace std;

    int main()

    {

      vector<int> a = { 1, 45, 54, 71, 76, 12 };

      cout << "Vector: ";

      for (int i = 0; i < a.size(); i++)

        cout << a[i] << " ";

      cout << endl;

      cout << "nMin Element = "

        << *min_element(a.begin(), a.end());

      cout << "nMax Element = "

        << *max_element(a.begin(), a.end());

      return 0;

    }

    Output:

    Vector: 1 45 54 71 76 12 
    
    Min Element = 1
    Max Element = 76

    Time Complexity: O(N)
    Auxiliary Space: O(1)

    Last Updated :
    07 Jul, 2022

    Like Article

    Save Article

    Let,

     #include <vector>
    
     vector<int> v {1, 2, 3, -1, -2, -3};
    

    If the vector is sorted in ascending or descending order then you can find it with complexity O(1).

    For a vector of ascending order the first element is the smallest element, you can get it by v[0] (0 based indexing) and last element is the largest element, you can get it by v[sizeOfVector-1].

    If the vector is sorted in descending order then the last element is the smallest element,you can get it by v[sizeOfVector-1] and first element is the largest element, you can get it by v[0].

    If the vector is not sorted then you have to iterate over the vector to get the smallest/largest element.In this case time complexity is O(n), here n is the size of vector.

    int smallest_element = v[0]; //let, first element is the smallest one
    int largest_element = v[0]; //also let, first element is the biggest one
    for(int i = 1; i < v.size(); i++)  //start iterating from the second element
    {
        if(v[i] < smallest_element)
        {
           smallest_element = v[i];
        }
        if(v[i] > largest_element)
        {
           largest_element = v[i];
        }
    }
    

    You can use iterator,

    for (vector<int>:: iterator it = v.begin(); it != v.end(); it++)
    {
        if(*it < smallest_element) //used *it (with asterisk), because it's an iterator
        {
          smallest_element = *it;
        }
        if(*it > largest_element)
        {
          largest_element = *it;
        }
    }
    

    You can calculate it in input section (when you have to find smallest or largest element from a given vector)

    int smallest_element, largest_element, value;
    vector <int> v;
    int n;//n is the number of elements to enter
    cin >> n;
    for(int i = 0;i<n;i++)
    {
        cin>>value;
        if(i==0)
        {
            smallest_element= value; //smallest_element=v[0];
            largest_element= value; //also, largest_element = v[0]
        }
    
        if(value<smallest_element and i>0)
        {
            smallest_element = value;
        }
    
        if(value>largest_element and i>0)
        {
            largest_element = value;
        }
        v.push_back(value);
    }
    

    Also you can get smallest/largest element by built in functions

    #include<algorithm>
    
    int smallest_element = *min_element(v.begin(),v.end());
    
    int largest_element  = *max_element(v.begin(),v.end());
    

    You can get smallest/largest element of any range by using this functions. such as,

    vector<int> v {1,2,3,-1,-2,-3};
    
    cout << *min_element(v.begin(), v.begin() + 3); //this will print 1,smallest element of first three elements
    
    cout << *max_element(v.begin(), v.begin() + 3); //largest element of first three elements
    
    cout << *min_element(v.begin() + 2, v.begin() + 5); // -2, smallest element between third and fifth element (inclusive)
    
    cout << *max_element(v.begin() + 2, v.begin()+5); //largest element between third and first element (inclusive)
    

    I have used asterisk (*), before min_element()/max_element() functions. Because both of them return iterator. All codes are in c++.

    Improve Article

    Save Article

    Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a vector, find the maximum element of this vector using STL in C++. Example:

    Input: {1, 45, 54, 71, 76, 12}
    Output: 76
    
    Input: {1, 7, 5, 4, 6, 12}
    Output: 12

    Recommended: Please try your approach on {IDE} first, before moving on to the solution.

    Approach: Max or Maximum element can be found with the help of *max_element() function provided in STL. 

    Syntax:

    *max_element (first_index, last_index);

    CPP

    #include <bits/stdc++.h>

    using namespace std;

    int main()

    {

        vector<int> a = { 1, 45, 54, 71, 76, 12 };

        cout << "Vector: ";

        for (int i = 0; i < a.size(); i++)

            cout << a[i] << " ";

        cout << endl;

        cout << "nMax Element = "

             << *max_element(a.begin(), a.end());

        return 0;

    }

    Output:

    Vector: 1 45 54 71 76 12 
    
    Max Element = 76

    Time Complexity: O(N), where N is number of elements in the given range of the vector.
    Auxiliary Space: O(1)

    Last Updated :
    23 Jan, 2023

    Like Article

    Save Article

    Example

    To find the largest or smallest element stored in a vector, you can use the methods std::max_element and std::min_element, respectively. These methods are defined in <algorithm> header. If several elements are equivalent to the greatest (smallest) element, the methods return the iterator to the first such element. Return v.end() for empty vectors.

    std::vector<int> v = {5, 2, 8, 10, 9}; 
    int maxElementIndex = std::max_element(v.begin(),v.end()) - v.begin();
    int maxElement = *std::max_element(v.begin(), v.end());
    
    int minElementIndex = std::min_element(v.begin(),v.end()) - v.begin();
    int minElement = *std::min_element(v.begin(), v.end());
    
    std::cout << "maxElementIndex:" << maxElementIndex << ", maxElement:" << maxElement << 'n';
    std::cout << "minElementIndex:" << minElementIndex << ", minElement:" << minElement << 'n';
    

    Output:

    maxElementIndex:3, maxElement:10
    minElementIndex:1, minElement:2

    C++11

    The minimum and maximum element in a vector can be retrieved at the same time by using the method std::minmax_element, which is also defined in <algorithm> header:

    std::vector<int> v = {5, 2, 8, 10, 9}; 
    auto minmax = std::minmax_element(v.begin(), v.end());
    
    std::cout << "minimum element: " << *minmax.first << 'n';
    std::cout << "maximum element: " << *minmax.second << 'n';
    

    Output:

    minimum element: 2
    maximum element: 10

    Понравилась статья? Поделить с друзьями:
  • Как найти пулемет в игре сталкер
  • Как найти особый чертеж в black flag
  • Как составить жалобу в судна решение судьи
  • Как составить дефектный акт на кровлю
  • Как найти человека который возьмет кредит