Реализуем утилиту для эффективной сортировки и фильтрации лога IP-адресов. Продолжаем пользоваться сборочной фермой для публикации пакета.
Программа из стандартного ввода читает данные. Данные хранятся построчно. Каждая строка состоит из трех полей, разделенных одним символом табуляции, и завершается символом конца строки.
Формат строки:
text1 \t text2 \t text3 \n
Поля text2 и text3 игнорируются. Поле text1 имеет следующую структуру (ip4 address):
n1.n2.n3.n4 где n1..4 – целое число от 0 до 255.
Требуется загрузить список ip-адресов в память и отсортировать их в обратном лексикографическом порядке. Пример лексикографической сортировки (по первому числу, затем по второму и так далее):
1.1.1.1 1.2.1.1 1.10.1.1
Соответственно, обратная:
1.10.1.1 1.2.1.1 1.1.1.1
💡 Обратите внимание – сортировка выполняется в байтовом (численном) представлении IP-адреса, а не в строковом. Поэтому адрес, например, 1.2.1.1 меньше адреса 1.10.1.1 (ведь 2 < 10).Далее выводим в стандартный вывод следующее:
- Полный список адресов после сортировки. Одна строка - один адрес.
- Сразу следом список адресов, первый байт которых равен 1. Порядок сортировки не меняется. Одна строка - один адрес. Списки ничем не разделяются.
- Сразу продолжается список адресов, первый байт которых равен 46, а второй 70. Порядок сортировки не меняется. Одна строка - один адрес. Списки ничем не разделяются.
- Сразу продолжается список адресов, любой байт которых равен 46. Порядок сортировки не меняется. Одна строка - один адрес. Списки ничем не разделяются.
В приложенном к заданию исходном файле необходимо заменить, где это возможно, конструкции на аналогичные из стандарта С++14/C++17. Реализовать недостающий функционал. Не обязательно следовать приложенному шаблону. Можно выполнить задание, оформив код любым корректным способом.