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

std::multiset::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::multiset 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::multiset là một đối tượng const.
  • Nếu không có phần tử nào trong std::multiset 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::multiset.
  3. Trả về end() nếu không tìm thấy: Nếu tất cả các phần tử trong std::multiset đều nhỏ hơn key, lower_bound() trả về end() (hoặc cend()).
  4. Không thay đổi std::multiset: 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::multiset.
  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. Hữu ích với equal_range(): lower_bound() thường được dùng để xác định vị trí bắt đầu của một dãy giá trị bằng nhau khi kết hợp với equal_range().
  7. Độ 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::multiset.

Ví dụ

#include <iostream>
#include <set>

int main() {
std::multiset<int> mymultiset = {10, 20, 30, 30, 40, 50};

// Tìm phần tử đầu tiên không nhỏ hơn 25
auto it = mymultiset.lower_bound(25);
if (it != mymultiset.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 = mymultiset.lower_bound(30);
if (it != mymultiset.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 = mymultiset.lower_bound(60);
if (it != mymultiset.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::multiset 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ử trong std::multiset có giá trị bằng với 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::multiset
countĐếm số lượng phần tử có giá trị bằng với giá trị cho trước trong std::multiset