#include #include #include #include #include #include #include namespace rn = std::ranges; struct Student { int index_; std::string name_; double average_; }; std::vector filterStudents(const std::vector>& students, double minAverage) { std::vector result; rn::copy(students | std::views::transform([](const auto& student) { return student.get(); }) | std::views::filter([minAverage](const auto& student) { return student->average_ <= minAverage; }), std::back_inserter(result)); return result; } int main() { std::vector> students; students.push_back(std::make_unique(123456, "Jordan", 4.53)); students.push_back(std::make_unique(654321, "Michael", 4.51)); students.push_back(std::make_unique(246892, "John", 4.56)); students.push_back(std::make_unique(743561, "Jane", 4.44)); students.push_back(std::make_unique(811111, "Anna", 4.46)); students.push_back(std::make_unique(811111, "Tom", 4.36)); students.push_back(std::make_unique(811111, "Jerry", 4.56)); students.push_back(std::make_unique(811111, "Mike", 4.45)); const auto res = filterStudents(students, 4.45); rn::transform(res, std::ostream_iterator(std::cout, "\n"), [](const Student* student) { std::ostringstream os; os << "Name: " << student->name_ << " | index: " << student->index_ << " | average: " << student->average_; return os.str(); }); }