Написать программу, которая выполняет следующие действия:
1. Заполняет std::vector структурами DataStruct, прочитанными со стандартного
ввода. Чтение необходимо осуществлять с помощью итераторов и алгоритмов STL (std::copy, итераторы потока и перегрузки оператора побитового сдвига для чтения из потока)
2. Сортирует считанные данные следующим образом:
(a) По возрастанию key1
(b) По возрастанию key2, если key1 одинаковые
(c) По возрастанию длины строки key3, если прочие поля равны
3. Выводит результаты сортировки на стандартный вывод. Каждая строка должна содержать ровно
один объект. Формат каждого выводимого объекта аналогичен формату ввода. Вывод необходимо
осуществлять с помощью итераторов и алгоритмов STL (std::copy, итераторов потока и перегрузки
оператора побитового сдвига для вывода в поток)
Входные данные могут содержать строки с неподдерживаемым форматом данных. Такие строки должны
игнорироваться. Формат данных, который необходимо обрабатывать зависит в том числе от определения
DataStruct
1. Тип DataStruct определён следующим образом:
struct DataStruct
{
/* TYPE1 */ key1;
/* TYPE2 */ key2;
std::string key3;
};
Конкретные типы полей key1 и key2, а также соответствующий полям формат должны быть указаны
преподавателем
2. Каждая запись ограничена парой скобок. Внутри этих скобок в качестве разделителей используются
пробельные символы и символы :. Например:
(:key1 10ull:key2 ’c’:key3 "Data":)
Порядок описания полей в структуре не определён. Например следующие структуры данных считаются идентичными:
(:key1 10ull:key2 ’c’:key3 "Data":)
(:key2 ’c’:key1 10ull:key3 "Data":)
(:key3 "Data":key2 ’c’:key1 10ull:)
Имя поля и соответствующее значение гарантировано разделены ровно одним пробелом. Символы
двоеточия гарантировано примыкают к прочим элементам записи. При выводе в поток поля выводятся в том порядке, в котором они заданы в структуре (запоминать исходный порядок не требуется)
3. Поля могут иметь следующий тип и соответствующий формат:
• [ULL LIT] Беззнаковое максимально доступной ёмкости (unsigned long long) в формате литерала:
:keyX 89ull:
:keyX 89ULL:
• [ULL HEX] Беззнаковое максимально доступной ёмкости (unsigned long long) в формате шестнадцатиричного литерала:
:keyX 0xFFFA:
:keyX 0X0100f: