#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <algorithm>
struct product
{
std::string name;
int price;
friend std:
stream& operator<< (std:
stream& ost, product const& rhs)
{
ost << rhs.name << " " << rhs.price << '\n';
return ost;
}
};
struct node
{
node(product const& rhs) : data(rhs), next(nullptr){}
product data;
node* next;
};
// однонаправленный список
class list
{
public:
list() : root(nullptr){}
void add(product const& rhs) // добавление в список
{
if (!root)
{
root = new node(rhs);
}
else
{
node* tmp = root;
while (tmp->data.name != rhs.name && tmp->next)
{
tmp = tmp->next;
}
if (tmp->data.name != rhs.name)
{
tmp->next = new node(rhs);
}
}
}
void print() const // печать списка
{
node* tmp = root;
while (tmp)
{
std::cout << tmp->data;
tmp = tmp->next;
}
}
node* find(std::string const& name) const // поиск в списке единицы товара
{
node* ret = root;
while (ret && ret->data.name != name)
{
ret = ret->next;
}
return ret;
}
void dump(std::string const& name) const // сброс в файл единицы товара
{
node* found = find(name);
if (found)
{
std:
fstream ofs("out.txt"
;
ofs << found->data;
ofs.close();
}
else
{
std::cout << "product not found\n";
}
}
~list()
{
node* tmp = root;
while (root)
{
root = root->next;
delete tmp;
tmp = root;
}
}
private:
node* root;
};
int main()
{
int n;
std::cout << "n: ";
std::cin >> n;
std::cin.ignore(1);
product* par = new product[n];
for (int i = 0; i < n; ++i) // заполнение массива
{
std::cout << "name: ";
std::getline(std::cin, par
.name);
std::cout << "price: ";
std::cin >> par.price;
std::cin.ignore(1);
}
std::sort(par, par + n, [](auto& a, auto& b) {return a.price < b.price; });
list lst;
for (int i = 0; i < n; ++i)// заполнение списка
{
lst.add(par);
}
delete[] par;
par = nullptr;
lst.print();
lst.dump("name 1"
return 0;
}