The std::min_element() in C++ is an STL algorithm that is used to find the minimum element in a given range. This range can be array, vector, list or any other container. It is defined inside the <algorithm> header file. In this article, we will learn about the std::min_element() in C++.
Example:
C++
// C++ program to illustrate the use of
// std::min_element()
#include <bits/stdc++.h>
using namespace std;
bool comp (int a, int b) {
return a < b;
}
int main()
{
vector<int> v = {2, 1, 17, 10};
int arr[4] = {33, 87, 1, 71};
int n = sizeof(arr) / sizeof(arr[0]);
// Min element in vector
cout << *min_element(v.begin(), v.end())
<< endl;
// Min element in array
cout << *max_element(v.begin(), v.end());
return 0;
}
std::min_element() Syntax
std::min_element(first, last, comp);
Parameters
- first: Iterator to the first element of the range.
- last: Iterator to the element just after the last element of the range.
- comp: Binary function, functor or lambda expression that compares two elements in the range. By default, it is set as < operator.
Return Value
- Returns an iterator to the smallest element in the range.
- When the range is empty, it returns iterator to the last.
More Examples of std::min_element()
We can find the minimum element of the given range using std::min_element().
Example 1: Find Minimum Element in Array
C++
// C++ program to illustrate the use of
// std::min_element() in array
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {33, 87, 1, 71};
int n = sizeof(arr) / sizeof(arr[0]);
// Finding the minimum element in array
cout << *min_element(arr, arr + n);
return 0;
}
Time Complexity: O(n), where n is the number of elements in array.
Auxiliary Space: O(1)
Example 2: Finding Minimum Element in Deque with Multiple Minimums
When there are multiple minimum elements present in the range, std::min_element() returns the iterator to the first minimum element.
C++
// C++ program to illustrate the use of
// std::min_element() in deque
#include <bits/stdc++.h>
using namespace std;
int main() {
deque<int> d = {33, 1, 87, 1, 71, 1};
// Finding the minimum element in the deque
auto min = min_element(d.begin(), d.end());
// Finding the position
cout << "Index: " << distance(d.begin(), min);
return 0;
}
Time Complexity: O(n), where n is the number of elements in deque.
Auxiliary Space: O(1)
Example 3: Find Minimum Element in Vector of User Defined Data Type
We have to use a custom comparator to determine how to compare user-defined data types based on any of their properties.
C++
// C++ Program to find the minimum element in
// the vector of structure
#include <bits/stdc++.h>
using namespace std;
struct St {
string name;
int sno;
};
int main() {
// Create a vector of structure
vector<St> v = {{"Ashok", 11}, {"Deepak", 15},
{"Anmol", 23}, {"Vikas", 19}};
// Find the minimum element in the vector of structure
// based on the sno field
St min = *min_element(v.begin(), v.end(),
[](const St &i, const St &j) {
return i.sno < j.sno;
});
cout << min.name << " " << min.sno;
return 0;
}
Time Complexity: O(n), where n is the number of elements in the vector.
Auxiliary Space: O(1)
Working of std::min_element()
std::min_element() implements a linear search algorithm to find the smallest element in the range. It compares each element of the range one by one using the iterator/pointer provided to it as arguments. This is the reason why it gives O(n) linear time complexity.
std::min_element() is not specialized for sorted containers such as std::set, std::map, etc., and still compares all the elements of these containers to find the minimum element.