#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 ptr; rn::transform(students, std::back_inserter(ptr), [](const std::unique_ptr &s){return s.get();}); std::erase_if(ptr, [minAverage](Student* s){return s->average_ < minAverage;}); return ptr; } 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); for(const auto& [ind, nam, av] : res | std::views::transform([](Student *ptr){return *ptr;})){ printf("%d %s %f\n", ind, nam.c_str(), av); } }