Для закрепления материала по std::tuple выполните следующее задание, код должен быть валидным.
Фильтрация IP-адресов Цель задания – реализовать приложение обработки списка 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. Порядок сортировки не меняется. Одна строка - один адрес. Списки ничем не разделяются.
Макет исходного кода, а также тестовый файл с данными ip_filter.tsv прилагается к материалам занятия. Проверить себя можно следующим образом (Linux):
cat ip_filter.tsv | ./ip_filter | md5sum
24e7a7b2270daee89c64d3ca5fb3da1a -
mkdir -p build && cd build/
cmake -DCMAKE_BUILD_TYPE=Release ../
cmake --build .