#include #include #include #include #include struct Product { std::string name { }; double price { }; int stock { }; }; std::vector read_products(std::istream& is) { std::vector products { }; int count { }; is >> count; products.resize(count); std::transform(products.begin(), products.end(), products.begin(), [&is](Product a) { is >> a.name >> a.price >> a.stock; return a; }); return products; } int main() { std::ifstream ifs { "products.txt" }; std::vector products { read_products(ifs) }; std::sort(products.begin(), products.end(), [](Product const& a, Product const& b) { return a.price > b.price; }); auto pivot = std::stable_partition(products.begin(), products.end(), [](Product const& a) { return a.stock > 0; }); auto fun = [](Product const& a) { std::ostringstream oss { }; oss << " - " << a.name << " (" << a.price << " SEK)"; return oss.str(); }; auto outputIt = std::ostream_iterator{ std::cout, "\n" }; std::cout << "Products in-stock: " << std::endl; std::transform(products.begin(), pivot, outputIt, fun); std::cout << "Product out-of-stock: " << std::endl; std::transform(pivot, products.end(), outputIt, fun); }