std::min_element

From Cppreference

Jump to: navigation, search
Defined in header <algorithm>

template< class T >
ForwardIterator min_element( ForwardIterator first, ForwardIterator last );
(1)
template< class T, class Compare >

ForwardIterator min_element( ForwardIterator first, ForwardIterator last,

                             Compare comp );
(2)

Finds the smallest element in the range [first, last). The first version uses ​operator< to compare the values, the second version uses the given comparison function comp.

Contents

Parameters

first, last - forward iterators defining the range to examine
cmp - comparison function which returns ​true if if *a is less than *b.

The signature of the comparison function should be equivalent to the following:

bool cmp(const Type1 &a, const Type2 &b);

The signature does not need to have const &, but the function must not modify the objects passed to it.
The types ​Type1​ and ​Type2​ must be such that an object of type ​ForwardIterator​ can be dereferenced and then implicitly converted to both of them.

Return value

Iterator to the smallest element in the range [first, last).

Complexity

linear in the distance between first and last.

Equivalent function

First version:
template<class ForwardIterator>
ForwardIterator min_element(ForwardIterator first, ForwardIterator last)
{
    if (first == last) {
        return last;
        }
    ForwardIterator smallest = first;
    ++first;
    for (; first != last; ++first) {
        if (*first < *smallest) {
            smallest = first;
        }
    }
    return smallest;
}
Second version:
template<class ForwardIterator, class Compare>
ForwardIterator min_element(ForwardIterator first, ForwardIterator last, 
                            Compare comp)
{
    if (first == last) {
        return last;
        }
    ForwardIterator smallest = first;
    ++first;
    for (; first != last; ++first) {
        if (comp(*first, *smallest)) {
            smallest = first;
        }
    }
    return largest;
}

Example

#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
{
    int data[] = { 3, 1, 4, 1, 5, 9 };
    std::vector<int> v(data, data+6);
 
    std::vector<int>::iterator result = std::min_element(v.begin(), v.end());
    std::cout << "min element at: " << std::distance(v.begin(), result);
 
    return 0;
}

Output:

​min element at: 5​

See also

max_element
returns the largest element in a range
(function template)
min
returns the smaller of two elements
(function template)
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
In other languages