std::min_element
#include <algorithm>
// So sánh bằng toán tử <
template <class ForwardIterator>
ForwardIterator min_element (ForwardIterator first, ForwardIterator last);
// Sử dụng hàm so sánh tùy chỉnh
template <class ForwardIterator, class Compare>
ForwardIterator min_element (ForwardIterator first, ForwardIterator last,
Compare comp);
Tìm phần tử có giá trị nhỏ nhất trong một phạm vi (range) được chỉ định.
Tham số
first
- Forward Iterator trỏ đến phần tử đầu tiên trong phạm vi cần tìm phần tử nhỏ nhất.
last
- Forward Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi. Phạm vi là
[first, last)
.
comp
- Một hàm hoặc đối tượng hàm (comparator) nhận hai đối số (hai phần tử trong phạm vi) và trả về true nếu phần tử thứ nhất được coi là nhỏ hơn phần tử thứ hai theo tiêu chí so sánh, false nếu ngược lại. (Phiên bản 2)
Giá trị trả về
- Forward Iterator trỏ đến phần tử nhỏ nhất trong phạm vi
[first, last)
. Nếu có nhiều phần tử nhỏ nhất, iterator trỏ đến phần tử đầu tiên được tìm thấy. - Nếu phạm vi rỗng,
last
được trả về.
Đặc điểm
- Phạm vi
[first, last)
là "nửa mở", không bao gồm phần tửlast
. min_element()
không thay đổi phạm vi đầu vào.min_element()
yêu cầu Forward Iterator, cho phép di chuyển một chiều về phía trước.- Trong C++11 trở lên, bạn có thể sử dụng biểu thức lambda cho hàm so sánh
comp
(phiên bản 2) để code ngắn gọn và dễ đọc hơn. min_element()
thường được sử dụng để:- Tìm phần tử nhỏ nhất trong một container (ví dụ: std::vector, std::array, mảng C-style).
- Tìm phần tử nhỏ nhất trong một phần của container.
- Kết hợp với các thuật toán khác để tìm phần tử nhỏ nhất thỏa mãn một điều kiện cụ thể.
Phân biệt với max_element(), minmax_element(), và min()
max_element()
tìm phần tử lớn nhất trong một phạm vi.minmax_element()
tìm đồng thời cả phần tử nhỏ nhất và lớn nhất trong một phạm vi.min()
tìm giá trị nhỏ nhất của hai giá trị hoặc trong một initializer list, hoặc phần tử nhỏ nhất trong một phạm vi (từ C++14).min_element()
tìm iterator trỏ đến phần tử nhỏ nhất trong một phạm vi.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm>
// Hàm so sánh để tìm số chẵn nhỏ nhất
bool compareEven(int a, int b) {
if (a % 2 != 0 && b % 2 == 0) return false;
if (a % 2 == 0 && b % 2 != 0) return true;
return a < b;
}
int main() {
std::vector<int> numbers = {5, 2, 8, 1, 9, 4};
// Tìm phần tử nhỏ nhất trong numbers
auto minIt = std::min_element(numbers.begin(), numbers.end());
std::cout << "Smallest element: " << *minIt << std::endl;
std::cout << "Index of smallest element: " << (minIt - numbers.begin()) << std::endl;
// Tìm phần tử nhỏ nhất trong phạm vi từ phần tử thứ 2 đến cuối
auto minIt2 = std::min_element(numbers.begin() + 1, numbers.end());
std::cout << "Smallest element from index 1: " << *minIt2 << std::endl;
// Tìm số chẵn nhỏ nhất sử dụng hàm so sánh tùy chỉnh
auto minEvenIt = std::min_element(numbers.begin(), numbers.end(), compareEven);
std::cout << "Smallest even element: " << *minEvenIt << std::endl;
return 0;
}
Các hàm liên quan
max_element | Tìm phần tử có giá trị lớn nhất trong một phạm vi được chỉ định |
lower_bound | Tìm vị trí đầu tiên trong một phạm vi đã được sắp xếp mà có thể chèn một giá trị cho trước vào mà không làm mất tính sắp xếp của phạm vi |
min | Trả về giá trị nhỏ nhất trong hai giá trị được cung cấp |