Advertisement
chevengur

СПРИНТ № 5 | Алгоритмы поиска | Урок 4: Поиск в отсортированном векторе, словаре и множестве 1/3

Feb 5th, 2024
1,191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <set>
  4.  
  5. using namespace std;
  6.  
  7. // Функция для поиска ближайшего элемента в множестве к заданному значению
  8. set<int>::const_iterator FindNearestElement(const set<int>& numbers, int target) {
  9.     // Ищем первый элемент, не меньший заданного значения
  10.     auto it_lower = numbers.lower_bound(target);
  11.  
  12.     // Случай 1: Если it_lower указывает на начало множества, возвращаем его
  13.     if (it_lower == numbers.begin()) {
  14.         return it_lower;
  15.     }
  16.  
  17.     // Случай 2: Если it_lower указывает за пределы множества, возвращаем предыдущий элемент
  18.     if (it_lower == numbers.end()) {
  19.         auto it_last = prev(it_lower);
  20.         return it_last;
  21.     }
  22.  
  23.     // Случай 3: Выбираем ближайший элемент среди текущего и предыдущего
  24.     auto it_prev = prev(it_lower);
  25.     bool is_closer_to_prev = (target - *it_prev <= *it_lower - target);
  26.  
  27.     // Возвращаем итератор на ближайший элемент
  28.     return is_closer_to_prev ? it_prev : it_lower;
  29. }
  30.  
  31. int main() {
  32.     set<int> numbers = {1, 4, 6};
  33.  
  34.     // Проверка различных значений для FindNearestElement
  35.     cout << *FindNearestElement(numbers, 0) << " " << *FindNearestElement(numbers, 3) << " "
  36.          << *FindNearestElement(numbers, 5) << " " << *FindNearestElement(numbers, 6) << " "
  37.          << *FindNearestElement(numbers, 100) << endl;
  38.  
  39.     // Проверка для пустого множества
  40.     set<int> empty_set;
  41.     cout << (FindNearestElement(empty_set, 8) == end(empty_set)) << endl;
  42.  
  43.     return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement