#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
using namespace std;
void variant_1(){
//Тупой вариант
//Если массив структур "покупатель" не имеет дубликатов и нужно просто отсортировать массив, а общую стоимость покупок нужно глобальную выдавать
struct pokupatel{
string famulia,imya,nomer_carti,naimenovanie;
int stoimost;
};
pokupatel massiv[]={ //Заданный масив структур покупатель
{"Filatov","Andrey","3123-5235-6322-6232","Petrushka",20},
{"Mihailov","Sergey","6236-2355-2366-6344","Ukrop",30},
{"Mihailov","Sergey","6236-2355-2366-6344","Moloko",90},
{"Mihailova","Elena","9999-8888-7777-5555","Spichki",3},
{"Mihailova","Sveta","9999-8888-7777-6666","godnaya petrushka",9000},
};
//--------------------------------------
//Отсортирую в порядке увеличения стоимости отдельной покупки (на всякий случай)
std::sort(&massiv[0],&massiv[sizeof(massiv)/sizeof(*massiv)],[](pokupatel& a,pokupatel& b){return a.stoimost<b.stoimost;});
//Выведу эту штуку
cout<<" Svedeniya o pokupkah:\n\
Imya Familia Karta Cena Nazvanie Obshaya cena\n\
-----------------------------------------------------------------------\n";
int o=0;
for (auto a:massiv){
printf(" %-10s %-10s %-18s | %-5d %-20s | %-5d\n",a.imya.c_str(),a.famulia.c_str(),a.nomer_carti.c_str(),a.stoimost,a.naimenovanie.c_str(),(o+=a.stoimost));
}
}
void variant_2(){
//Умный вариант
//Если массив структур "покупатель" имеет дубликаты, и нужно из них собрать массив покупателей
struct pokupatel{
string famulia,imya,nomer_carti,naimenovanie;
int stoimost;
};
pokupatel massiv[]={ //Заданный масив структур покупатель
{"Filatov","Andrey","3123-5235-6322-6232","Petrushka",20}, // |
{"Mihailov","Sergey","7543-3457-2535-2321","Ukrop",30}, // | - эти ребята какую-то дичь купили
{"Mihailov","Sergey","7543-3457-2535-2321","Moloko",90}, // |
{"Mihailova","Elena","6236-2355-2366-6344","Moloko",90}, //Елена купила кучу спичек и молоко
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
{"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20}, //Света купила кучу петрушки и спички
{"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
{"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
{"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
{"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
{"Mihailova","Sveta","9999-8888-7777-5555","Spichki",3},
};
//--------------------------------------
std::unordered_map<string,int> bb;
for (auto a:massiv) if (auto m = bb.emplace(a.nomer_carti+" "+a.imya+" "+a.famulia,a.stoimost);!m.second) (*m.first).second+=a.stoimost;
using pp=std::pair<string,int>;
std::vector<pp> arr{bb.begin(),bb.end()};
std::sort(arr.begin(),arr.end(),[](auto& a, auto& b){return a.second<b.second; });
for (auto a:arr)
printf(" %-37s : %-5d\n",a.first.c_str(),a.second);
}
int main(){
variant_2();
// variant_1();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKCnZvaWQgdmFyaWFudF8xKCl7CiAgIC8v0KLRg9C/0L7QuSDQstCw0YDQuNCw0L3RggogICAvL9CV0YHQu9C4INC80LDRgdGB0LjQsiDRgdGC0YDRg9C60YLRg9GAICLQv9C+0LrRg9C/0LDRgtC10LvRjCIg0L3QtSDQuNC80LXQtdGCINC00YPQsdC70LjQutCw0YLQvtCyINC4INC90YPQttC90L4g0L/RgNC+0YHRgtC+INC+0YLRgdC+0YDRgtC40YDQvtCy0LDRgtGMINC80LDRgdGB0LjQsiwg0LAg0L7QsdGJ0YPRjiDRgdGC0L7QuNC80L7RgdGC0Ywg0L/QvtC60YPQv9C+0Log0L3Rg9C20L3QviDQs9C70L7QsdCw0LvRjNC90YPRjiDQstGL0LTQsNCy0LDRgtGMCgoKICAgc3RydWN0IHBva3VwYXRlbHsKICAgICAgc3RyaW5nIGZhbXVsaWEsaW15YSxub21lcl9jYXJ0aSxuYWltZW5vdmFuaWU7CiAgICAgIGludCBzdG9pbW9zdDsKICAgfTsKCiAgIHBva3VwYXRlbCBtYXNzaXZbXT17ICAgIC8v0JfQsNC00LDQvdC90YvQuSDQvNCw0YHQuNCyINGB0YLRgNGD0LrRgtGD0YAg0L/QvtC60YPQv9Cw0YLQtdC70YwKICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJGaWxhdG92IiwiQW5kcmV5IiwiMzEyMy01MjM1LTYzMjItNjIzMiIsIlBldHJ1c2hrYSIsMjB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92IiwiU2VyZ2V5IiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlVrcm9wIiwzMH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3YiLCJTZXJnZXkiLCI2MjM2LTIzNTUtMjM2Ni02MzQ0IiwiTW9sb2tvIiw5MH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiRWxlbmEiLCI5OTk5LTg4ODgtNzc3Ny01NTU1IiwiU3BpY2hraSIsM30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiU3ZldGEiLCI5OTk5LTg4ODgtNzc3Ny02NjY2IiwiZ29kbmF5YSBwZXRydXNoa2EiLDkwMDB9LAogICAgICAgICAgICAgICAgICAgICAgfTsKCiAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgogICAvL9Ce0YLRgdC+0YDRgtC40YDRg9GOINCyINC/0L7RgNGP0LTQutC1INGD0LLQtdC70LjRh9C10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuCDQvtGC0LTQtdC70YzQvdC+0Lkg0L/QvtC60YPQv9C60LggKNC90LAg0LLRgdGP0LrQuNC5INGB0LvRg9GH0LDQuSkKICAgc3RkOjpzb3J0KCZtYXNzaXZbMF0sJm1hc3NpdltzaXplb2YobWFzc2l2KS9zaXplb2YoKm1hc3NpdildLFtdKHBva3VwYXRlbCYgYSxwb2t1cGF0ZWwmIGIpe3JldHVybiBhLnN0b2ltb3N0PGIuc3RvaW1vc3Q7fSk7CgoKICAgLy/QktGL0LLQtdC00YMg0Y3RgtGDINGI0YLRg9C60YMKICAgY291dDw8IiBTdmVkZW5peWEgbyBwb2t1cGthaDpcblwKIElteWEgICAgICAgRmFtaWxpYSAgICBLYXJ0YSAgICAgICAgICAgICAgICAgIENlbmEgICAgTmF6dmFuaWUgICAgICAgICAgICAgICAgIE9ic2hheWEgY2VuYVxuXAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICAgICAgIGludCBvPTA7CiAgIGZvciAoYXV0byBhOm1hc3Npdil7CiAgICAgIHByaW50ZigiICUtMTBzICUtMTBzICUtMThzIHwgICUtNWQgICAlLTIwcyAgfCAgJS01ZFxuIixhLmlteWEuY19zdHIoKSxhLmZhbXVsaWEuY19zdHIoKSxhLm5vbWVyX2NhcnRpLmNfc3RyKCksYS5zdG9pbW9zdCxhLm5haW1lbm92YW5pZS5jX3N0cigpLChvKz1hLnN0b2ltb3N0KSk7CiAgIH0KfQoKCgp2b2lkIHZhcmlhbnRfMigpewogICAvL9Cj0LzQvdGL0Lkg0LLQsNGA0LjQsNC90YIKICAgLy/QldGB0LvQuCDQvNCw0YHRgdC40LIg0YHRgtGA0YPQutGC0YPRgCAi0L/QvtC60YPQv9Cw0YLQtdC70YwiINC40LzQtdC10YIg0LTRg9Cx0LvQuNC60LDRgtGLLCDQuCDQvdGD0LbQvdC+INC40Lcg0L3QuNGFINGB0L7QsdGA0LDRgtGMINC80LDRgdGB0LjQsiDQv9C+0LrRg9C/0LDRgtC10LvQtdC5CgoKICAgc3RydWN0IHBva3VwYXRlbHsKICAgICAgc3RyaW5nIGZhbXVsaWEsaW15YSxub21lcl9jYXJ0aSxuYWltZW5vdmFuaWU7CiAgICAgIGludCBzdG9pbW9zdDsKICAgfTsKCiAgIHBva3VwYXRlbCBtYXNzaXZbXT17ICAgIC8v0JfQsNC00LDQvdC90YvQuSDQvNCw0YHQuNCyINGB0YLRgNGD0LrRgtGD0YAg0L/QvtC60YPQv9Cw0YLQtdC70YwKICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJGaWxhdG92IiwiQW5kcmV5IiwiMzEyMy01MjM1LTYzMjItNjIzMiIsIlBldHJ1c2hrYSIsMjB9LCAgLy8gfAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92IiwiU2VyZ2V5IiwiNzU0My0zNDU3LTI1MzUtMjMyMSIsIlVrcm9wIiwzMH0sICAgICAvLyB8IC0g0Y3RgtC4INGA0LXQsdGP0YLQsCDQutCw0LrRg9GOLdGC0L4g0LTQuNGH0Ywg0LrRg9C/0LjQu9C4CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3YiLCJTZXJnZXkiLCI3NTQzLTM0NTctMjUzNS0yMzIxIiwiTW9sb2tvIiw5MH0sICAgIC8vIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJNaWhhaWxvdmEiLCJFbGVuYSIsIjYyMzYtMjM1NS0yMzY2LTYzNDQiLCJNb2xva28iLDkwfSwgIC8v0JXQu9C10L3QsCDQutGD0L/QuNC70LAg0LrRg9GH0YMg0YHQv9C40YfQtdC6INC4INC80L7Qu9C+0LrQvgogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIkVsZW5hIiwiNjIzNi0yMzU1LTIzNjYtNjM0NCIsIlNwaWNoa2kiLDN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Ik1paGFpbG92YSIsIlN2ZXRhIiwiOTk5OS04ODg4LTc3NzctNTU1NSIsIlBldHJ1c2hrYSIsMjB9LCAvL9Ch0LLQtdGC0LAg0LrRg9C/0LjQu9CwINC60YPRh9GDINC/0LXRgtGA0YPRiNC60Lgg0Lgg0YHQv9C40YfQutC4CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiU3ZldGEiLCI5OTk5LTg4ODgtNzc3Ny01NTU1IiwiUGV0cnVzaGthIiwyMH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiU3ZldGEiLCI5OTk5LTg4ODgtNzc3Ny01NTU1IiwiUGV0cnVzaGthIiwyMH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiU3ZldGEiLCI5OTk5LTg4ODgtNzc3Ny01NTU1IiwiUGV0cnVzaGthIiwyMH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiU3ZldGEiLCI5OTk5LTg4ODgtNzc3Ny01NTU1IiwiUGV0cnVzaGthIiwyMH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiTWloYWlsb3ZhIiwiU3ZldGEiLCI5OTk5LTg4ODgtNzc3Ny01NTU1IiwiU3BpY2hraSIsM30sCiAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0cmluZyxpbnQ+IGJiOwogICBmb3IgKGF1dG8gYTptYXNzaXYpIGlmIChhdXRvIG0gPSBiYi5lbXBsYWNlKGEubm9tZXJfY2FydGkrIiAiK2EuaW15YSsiICIrYS5mYW11bGlhLGEuc3RvaW1vc3QpOyFtLnNlY29uZCkgKCptLmZpcnN0KS5zZWNvbmQrPWEuc3RvaW1vc3Q7CiAgIHVzaW5nIHBwPXN0ZDo6cGFpcjxzdHJpbmcsaW50PjsKICAgc3RkOjp2ZWN0b3I8cHA+IGFycntiYi5iZWdpbigpLGJiLmVuZCgpfTsKICAgc3RkOjpzb3J0KGFyci5iZWdpbigpLGFyci5lbmQoKSxbXShhdXRvJiBhLCBhdXRvJiBiKXtyZXR1cm4gYS5zZWNvbmQ8Yi5zZWNvbmQ7IH0pOwogICBmb3IgKGF1dG8gYTphcnIpCiAgICAgcHJpbnRmKCIgJS0zN3MgOiAlLTVkXG4iLGEuZmlyc3QuY19zdHIoKSxhLnNlY29uZCk7Cgp9CgoKaW50IG1haW4oKXsKCiAgIHZhcmlhbnRfMigpOwogIC8vIHZhcmlhbnRfMSgpOwogICByZXR1cm4gMDsKCn0K