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

std::set::lower_bound

#include <set>

      iterator lower_bound(const key_type& key);
const_iterator lower_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ị không nhỏ hơn (lớn hơn hoặc bằng) 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ị không nhỏ 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ị không nhỏ 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 hoặc bằng 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ử "không nhỏ hơn": lower_bound() tìm kiếm phần tử đầu tiên có giá trị không nhỏ hơn key, tức là lớn hơn hoặc bằng key.
  2. Sắp xếp: lower_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 key, lower_bound() trả về end() (hoặc cend()).
  4. Không thay đổi std::set: lower_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 upper_bound(): 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), trong khi upper_bound() tìm phần tử đầu tiên có giá trị lớn hơn key.
  6. Độ phức tạp: Độ phức tạp của lower_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 không nhỏ hơn 25
auto it = myset.lower_bound(25);
if (it != myset.end()) {
std::cout << "The lower bound of 25 is: " << *it << '\n'; // Output: The lower bound of 25 is: 30
} else {
std::cout << "No element is greater than or equal to 25\n";
}

// Tìm phần tử đầu tiên không nhỏ hơn 30
it = myset.lower_bound(30);
if (it != myset.end()) {
std::cout << "The lower bound of 30 is: " << *it << '\n'; // Output: The lower bound of 30 is: 30
} else {
std::cout << "No element is greater than or equal to 30\n";
}

// Tìm phần tử đầu tiên không nhỏ hơn 60 (không tồn tại)
it = myset.lower_bound(60);
if (it != myset.end()) {
std::cout << "The lower bound of 60 is: " << *it << '\n';
} else {
std::cout << "No element is greater than or equal to 60\n"; // Output: No element is greater than or equal to 60
}

return 0;
}

Các hàm liên quan

upper_boundTrả 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
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