std::set::upper_bound
#include <set>
iterator upper_bound(const key_type& key);
const_iterator upper_bound(const key_type& key) const;
Trả về một iterator trỏ đến phần tử đầu tiên trong std::set có giá trị lớn hơn giá trị key
cho trước.
Tham số
key
- Giá trị cần tìm kiếm.
Giá trị trả về
- iterator (phiên bản không const): Trả về iterator có thể đọc và ghi, trỏ đến phần tử đầu tiên có giá trị lớn hơn
key
. - const_iterator (phiên bản const): Trả về const_iterator chỉ đọc, trỏ đến phần tử đầu tiên có giá trị lớn hơn
key
. Phiên bản này được sử dụng khi std::set là một đối tượngconst
. - Nếu không có phần tử nào trong std::set lớn hơn
key
, hàm trả vềend()
(hoặccend()
cho phiên bảnconst
).
Đặc điểm
- Tìm kiếm phần tử "lớn hơn":
upper_bound()
tìm kiếm phần tử đầu tiên có giá trị lớn hơnkey
. - Sắp xếp:
upper_bound()
dựa trên thứ tự sắp xếp của các phần tử trong std::set. - Trả về
end()
nếu không tìm thấy: Nếu tất cả các phần tử trong std::set đều nhỏ hơn hoặc bằngkey
,upper_bound()
trả vềend()
(hoặccend()
). - Không thay đổi std::set:
upper_bound()
là một hàmconst
, nó không làm thay đổi nội dung hay trạng thái của std::set. - Phân biệt với
lower_bound()
:upper_bound()
tìm phần tử đầu tiên có giá trị lớn hơnkey
, trong khilower_bound()
tìm phần tử đầu tiên có giá trị không nhỏ hơnkey
(lớn hơn hoặc bằng). - Độ phức tạp: Độ phức tạp của
upper_bound()
làO(log n)
, với n là số phần tử trong std::set.
Ví dụ
#include <iostream>
#include <set>
int main() {
std::set<int> myset = {10, 20, 30, 40, 50};
// Tìm phần tử đầu tiên lớn hơn 25
auto it = myset.upper_bound(25);
if (it != myset.end()) {
std::cout << "The upper bound of 25 is: " << *it << '\n'; // Output: The upper bound of 25 is: 30
} else {
std::cout << "No element is greater than 25\n";
}
// Tìm phần tử đầu tiên lớn hơn 30
it = myset.upper_bound(30);
if (it != myset.end()) {
std::cout << "The upper bound of 30 is: " << *it << '\n'; // Output: The upper bound of 30 is: 40
} else {
std::cout << "No element is greater than 30\n";
}
// Tìm phần tử đầu tiên lớn hơn 5 (tồn tại)
it = myset.upper_bound(5);
if (it != myset.end()) {
std::cout << "The upper bound of 5 is: " << *it << '\n'; // Output: The upper bound of 5 is: 10
} else {
std::cout << "No element is greater than 5\n";
}
// Tìm phần tử đầu tiên lớn hơn 50 (không tồn tại)
it = myset.upper_bound(50);
if (it != myset.end()) {
std::cout << "The upper bound of 50 is: " << *it << '\n';
} else {
std::cout << "No element is greater than 50\n"; // Output: No element is greater than 50
}
return 0;
}
Các hàm liên quan
lower_bound | Trả về một iterator trỏ đến phần tử đầu tiên trong std::set có giá trị lớn hơn hoặc bằng giá trị key cho trước |
equal_range | Trả về một cặp iterator xác định phạm vi các phần tử có giá trị bằng giá trị key cho trước |
find | Tìm kiếm một phần tử có giá trị bằng với giá trị cho trước trong std::set |
count | Đếm số lượng phần tử có giá trị bằng với giá trị cho trước trong std::set |