Chuyển tới nội dung chính

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ượng const.
  • Nếu không có phần tử nào trong std::set lớn hơn key, hàm trả về end() (hoặc cend() cho phiên bản const).

Đặc điểm

  1. 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ơn key.
  2. 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.
  3. 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ằng key, upper_bound() trả về end() (hoặc cend()).
  4. Không thay đổi std::set: upper_bound() là một hàm const, nó không làm thay đổi nội dung hay trạng thái của std::set.
  5. Phân biệt với lower_bound(): upper_bound() tìm phần tử đầu tiên có giá trị lớn hơn key, trong khi lower_bound() tìm phần tử đầu tiên có giá trị không nhỏ hơn key (lớn hơn hoặc bằng).
  6. Độ phức tạp: Độ phức tạp của upper_bound()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_boundTrả 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_rangeTrả 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
findTì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