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

std::multimap::lower_bound

#include <map>

      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::multimap có key 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ủa key 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ó key 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ó key không nhỏ hơn key. Phiên bản này được sử dụng khi std::multimap là một đối tượng const.
  • Nếu không có phần tử nào trong std::multimap có key 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ó key 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 key trong std::multimap.
  3. Trả về end() nếu không tìm thấy: Nếu tất cả các key trong std::multimap đều nhỏ hơn key, lower_bound() trả về end() (hoặc cend()).
  4. Không thay đổi std::multimap: 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::multimap.
  5. Phân biệt với upper_bound(): lower_bound() tìm phần tử đầu tiên có key 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ó key 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. Trả về phần tử đầu tiên: Trong trường hợp có nhiều phần tử có key bằng key, lower_bound() trả về iterator đến phần tử đầu tiên trong số đó.
  8. Độ 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::multimap.

Ví dụ

#include <iostream>
#include <map>

int main() {
std::multimap<int, std::string> mymultimap = {
{10, "ten"},
{20, "twenty"},
{30, "thirty"},
{30, "another thirty"},
{40, "forty"},
{50, "fifty"}
};

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

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

// Tìm phần tử đầu tiên có key không nhỏ hơn 60 (không tồn tại)
it = mymultimap.lower_bound(60);
if (it != mymultimap.end()) {
std::cout << "The lower bound of 60 is: " << it->first << '\n';
} else {
std::cout << "No element has a key greater than or equal to 60\n"; // Output: No element has a key 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::multimap có key 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::multimap có key bằng với giá trị key cho trước
findTìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::multimap
countĐếm số lượng phần tử có key bằng với giá trị key cho trước trong std::multimap