low_bound و upper_bound توابع جستجوی باینری داخلی هستند.
low_bound - تابعی که در زمان لگاریتمی کوچکترین عنصر را در یک آرایه مرتب شده پیدا می کند که بزرگتر یا مساوی با مقدار داده شده k است.
مرزهای آرایه و مقدار k را به عنوان آرگومان می گیرد.
اگر چنین عنصری وجود نداشته باشد، یک تکرارکننده را به عنصر پیدا شده برمیگرداند یا به انتهای آرایه (شامل نمیشود).
میتوانید اطلاعات بیشتری را در اسناد بخوانید.
upper_bound - تابعی است که در زمان لگاریتمی در یک آرایه مرتب شده کوچکترین عنصر را پیدا می کند که به شدت بزرگتر از مقدار داده شده k است.
مرزهای آرایه و مقدار k را به عنوان آرگومان می گیرد.
اگر چنین عنصری وجود نداشته باشد، یک تکرارکننده را به عنصر پیدا شده برمیگرداند یا به انتهای آرایه (شامل نمیشود).
میتوانید اطلاعات بیشتری را در اسناد بخوانید.
شایان ذکر است که استفاده از این توابع در یک مجموعه یا چند مجموعه در زمان لگاریتمی به دلیل عدم وجود تکرارکننده در مجموعههای دسترسی تصادفی فوق کار نمیکند.
با این حال، این مجموعه ها دارای روش های داخلی متناظر هستند (یعنی باید از آنها "از طریق یک نقطه" استفاده کنید).
مثالها:
بردار a = { 0, 1, 3, 5, 7 };
vector::iterator it;
it = low_bound(a.begin(), a.end(), 4);
// *it == 5
it = low_bound(a.begin(), a.end(), 5);
// *it == 5
it = low_bound(a.begin(), a.end(), 8);
// it == a.end()
it = upper_bound(a.begin(), a.end(), 4);
// *it == 5
it = upper_bound(a.begin(), a.end(), 5);
// *it == 7
it = upper_bound(a.begin(), a.end(), -1);
// *it == 0
// با کم کردن تکرار کننده ها، می توانید شاخص عنصر پیدا شده را بدست آورید
int ind = low_bound(a.begin(), a.end(), 4) - a.begin();
// ind == 3
// نیاز به استفاده از متدها به جای توابع برای مجموعه ها و مجموعه های مشابه است
set s{ 1, 3, 5 };
set::iterator sit;
sit = s.lower_bound(3);
// *نشین == 3
sit = s.upper_bound(3);
// *نشین == 5