upper_bound и lower_bound для нерастущего вектора в c ++

Опубликовано: 30 Декабря, 2021

Функции lower_bound () и upper_bound () по умолчанию работают с неубывающим массивом. Функция lower_bound () находит итератор первого элемента, который не сравнивается с данным элементом. Функция upper_bound () возвращает итератор к первому большему элементу.

Учитывая массив, преобразующий это в невозрастающий вектор, применяя функции std :: upper_bound и std :: lower_bound к вектору

Для массива, отсортированного в невозрастающий массив, lower_bound () находит итератор для первого элемента, который не сравнивается больше, чем с данным элементом. upper_bound () находит итератор для первого элемента, который меньше заданного элемента. Для этого мы используем больше ().

// C++ program to demonstrate the working of lower_bound()
// and upper_bound() for array sorted in non-decreasing
// array,
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
int unsorted[10] = { 3, 3, 2, 1, 5, 5, 4, 3, 7, 8 };
std::vector< int > v(unsorted, unsorted + 10);
// sorting vector in non increasing order. Vector
// becomes {8, 7, 5, 5, 4, 3, 3, 3, 2, 1}
std::sort(v.begin(), v.end(), std::greater< int >());
std::vector< int >::iterator low, up;
low = std::lower_bound(v.begin(), v.end(), 3, std::greater< int >());
up = std::upper_bound(v.begin(), v.end(), 5, std::greater< int >());
std::cout << "lower_bound at position " << (low - v.begin()) << ' ' ;
std::cout << "upper_bound at position " << (up - v.begin()) << ' ' ;
return 0;
}
Выход:
lower_bound в позиции 5
upper_bound в позиции 4
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++