Advertisement
RobertDeMilo

Основы С++4.2 Компаратор для сортировки (sort + lexicographical_compare + tolower)

Sep 30th, 2023
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. int main() {
  9.     /* FOR SUPPORT: объявляем переменную для хранения количество чисел и инициализируем нулем */
  10.     int n = 0;
  11.     /* FOR SUPPORT: объявляем строку */
  12.     string val;
  13.     /* FOR SUPPORT: объявляем вектор строк */
  14.     vector<string> v;
  15.     /* FOR SUPPORT: считываем число */
  16.     cin >> n;
  17.     /* FOR SUPPORT: выделяем память под место для n элементов */
  18.     v.reserve(n);
  19.     /* FOR SUPPORT: запускаем цикл на n итераций */
  20.     for (int i = 0; i < n; ++i) {
  21.         /* FOR SUPPORT: считываем строку */
  22.         cin >> val;
  23.         /* FOR SUPPORT: добавляем строку в конец вектора */
  24.         v.push_back(val);
  25.     }
  26.     /* FOR SUPPORT: begin() вернет начало контейнера\строки end() вернет конец контейнера\строки
  27.      * передаем в std::sort 3-им параметром лямбда-функцию, которая сравнивает две строки лексикографически */
  28.     sort(begin(v), end(v), [](const string& l, const string& r) {
  29.             return lexicographical_compare(begin(l), end(l), begin(r), end(r),
  30.                 /* FOR SUPPORT: передаем еще одну лямбда-функцию которая сравнивает символы без учета регистра */
  31.                 [](char cl, char cr) { return tolower(cl) < tolower(cr); }
  32.             );
  33.         }
  34.     );
  35.     /* FOR SUPPORT: запускаем цикл для обхода вектора */
  36.     for (int i = 0; i < v.size(); ++i) {
  37.         /* FOR SUPPORT: выводим i-ый элемент вектора */
  38.         cout << v[i] << ' ';
  39.     }
  40.     /* FOR SUPPORT: выводим перевод строки */
  41.     cout << endl;
  42. }
  43. -----------------------------------------------------------------------------------------------------------------------
  44. Прочитайте слова в вектор, а потом отсортируйте их алгоритмом sort. По умолчанию sort сравнивает элементы
  45. операцией <, которая для строк учитывает регистр символов. Чтобы сравнивать слова без учёта регистра символов, передайте алгоритму sort компаратор.
  46. В этом компараторе сравнивайте строки алгоритмом lexicographical_compare. Чтобы lexicographical_compare игнорировал регистр символов, передайте этому алгоритму компаратор, который перед сравнением приводит символы к нижнему регистру функцией tolower.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement