Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <set>
- using namespace std;
- // Функция для поиска ближайшего элемента в множестве к заданному значению
- set<int>::const_iterator FindNearestElement(const set<int>& numbers, int target) {
- // Ищем первый элемент, не меньший заданного значения
- auto it_lower = numbers.lower_bound(target);
- // Случай 1: Если it_lower указывает на начало множества, возвращаем его
- if (it_lower == numbers.begin()) {
- return it_lower;
- }
- // Случай 2: Если it_lower указывает за пределы множества, возвращаем предыдущий элемент
- if (it_lower == numbers.end()) {
- auto it_last = prev(it_lower);
- return it_last;
- }
- // Случай 3: Выбираем ближайший элемент среди текущего и предыдущего
- auto it_prev = prev(it_lower);
- bool is_closer_to_prev = (target - *it_prev <= *it_lower - target);
- // Возвращаем итератор на ближайший элемент
- return is_closer_to_prev ? it_prev : it_lower;
- }
- int main() {
- set<int> numbers = {1, 4, 6};
- // Проверка различных значений для FindNearestElement
- cout << *FindNearestElement(numbers, 0) << " " << *FindNearestElement(numbers, 3) << " "
- << *FindNearestElement(numbers, 5) << " " << *FindNearestElement(numbers, 6) << " "
- << *FindNearestElement(numbers, 100) << endl;
- // Проверка для пустого множества
- set<int> empty_set;
- cout << (FindNearestElement(empty_set, 8) == end(empty_set)) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement