Lower_bound và upper_bound là các hàm tìm kiếm nhị phân được tích hợp sẵn.
Lower_bound - một hàm, theo thời gian logarit, tìm phần tử nhỏ nhất trong một mảng đã sắp xếp lớn hơn hoặc bằng giá trị k đã cho.
Nó lấy giới hạn của mảng và giá trị của k làm đối số.
Trả về một trình vòng lặp cho phần tử tìm thấy hoặc đến phần cuối (không bao gồm) của mảng nếu không có phần tử nào như vậy tồn tại.
Bạn có thể đọc thêm trong tài liệu.
upper_bound - một hàm theo thời gian logarit trong một mảng đã sắp xếp sẽ tìm phần tử nhỏ nhất lớn hơn giá trị k đã cho.
Nó lấy giới hạn của mảng và giá trị của k làm đối số.
Trả về một trình vòng lặp cho phần tử tìm thấy hoặc đến phần cuối (không bao gồm) của mảng nếu không có phần tử nào như vậy tồn tại.
Bạn có thể đọc thêm trong tài liệu.
Cần làm rõ rằng việc sử dụng các hàm này trên một tập hợp hoặc nhiều tập hợp không hoạt động trong thời gian logarit do thiếu bộ lặp trong các tập hợp truy cập ngẫu nhiên ở trên.
Tuy nhiên, các bộ sưu tập này có các phương thức tích hợp sẵn tương ứng (nghĩa là bạn cần sử dụng chúng "thông qua dấu chấm").
Ví dụ:
vectơ a = { 0, 1, 3, 5, 7 };
vector::iterator it;
nó = Lower_bound(a.begin(), a.end(), 4);
// * nó == 5
nó = Lower_bound(a.begin(), a.end(), 5);
// * nó == 5
nó = Lower_bound(a.begin(), a.end(), 8);
// nó == a.end()
it = upper_bound(a.begin(), a.end(), 4);
// * nó == 5
it = upper_bound(a.begin(), a.end(), 5);
// * nó == 7
it = upper_bound(a.begin(), a.end(), -1);
// * nó == 0
// bằng cách trừ đi các vòng lặp, bạn có thể lấy chỉ mục của phần tử được tìm thấy
int ind = Lower_bound(a.begin(), a.end(), 4) - a.begin();
// ind == 3
// cần sử dụng các phương thức thay vì các hàm cho tập hợp và các tập hợp tương tự
tập hợp s{ 1, 3, 5 };
set::iterator ngồi;
ngồi = s.lower_bound(3);
// *ngồi == 3
ngồi = s.upper_bound(3);
// *ngồi == 5