В этом посте мы обсудим, как найти минимальное или максимальное значение в векторе на 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
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
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