Функцию фильтрации можно написать в одном экземпляре.
Хоть в нашем задании и небыло указания обрабатывать корректность ввода, но при вводе адреса начинающегося с '.' программа падает с непонятным сообщением.
При подаче на вход программе ~100к строк программа падает в корку.
$ time cat input100.tsv | ./bad_filter > /dev/null
Put lines
Sort lines
Segmentation fault (core dumped)
Строка сортировки черезмерно сложная:
std::sort(ip_pool.begin(), ip_pool.end(), [](const ip_address & lhs, const ip_address & rhs) {
return std::tie(lhs[0], lhs[1], lhs[2], lhs[3]) >= std::tie(rhs[0], rhs[1], rhs[2], rhs[3]);
});
Можно исправить на сорт с двумя аргументами и ислользовать стандартную функцию сравнения с используемыми вами классами. (она и ускорит выполнение программы)
Довольно понятный красивый код.
Функцию фильтрации можно написать в одном экземпляре.
Хоть в нашем задании и небыло указания обрабатывать корректность ввода, но при вводе адреса начинающегося с '.' программа падает с непонятным сообщением.
При подаче на вход программе ~100к строк программа падает в корку. $ time cat input100.tsv | ./bad_filter > /dev/null Put lines Sort lines Segmentation fault (core dumped)
Строка сортировки черезмерно сложная: std::sort(ip_pool.begin(), ip_pool.end(), [](const ip_address & lhs, const ip_address & rhs) { return std::tie(lhs[0], lhs[1], lhs[2], lhs[3]) >= std::tie(rhs[0], rhs[1], rhs[2], rhs[3]); }); Можно исправить на сорт с двумя аргументами и ислользовать стандартную функцию сравнения с используемыми вами классами. (она и ускорит выполнение программы)