fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <unordered_map>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8.  
  9.  
  10. void variant_1(){
  11. //Тупой вариант
  12. //Если массив структур "покупатель" не имеет дубликатов и нужно просто отсортировать массив, а общую стоимость покупок нужно глобальную выдавать
  13.  
  14.  
  15. struct pokupatel{
  16. string famulia,imya,nomer_carti,naimenovanie;
  17. int stoimost;
  18. };
  19.  
  20. pokupatel massiv[]={ //Заданный масив структур покупатель
  21. {"Filatov","Andrey","3123-5235-6322-6232","Petrushka",20},
  22. {"Mihailov","Sergey","6236-2355-2366-6344","Ukrop",30},
  23. {"Mihailov","Sergey","6236-2355-2366-6344","Moloko",90},
  24. {"Mihailova","Elena","9999-8888-7777-5555","Spichki",3},
  25. {"Mihailova","Sveta","9999-8888-7777-6666","godnaya petrushka",9000},
  26. };
  27.  
  28. //--------------------------------------
  29.  
  30.  
  31. //Отсортирую в порядке увеличения стоимости отдельной покупки (на всякий случай)
  32. std::sort(&massiv[0],&massiv[sizeof(massiv)/sizeof(*massiv)],[](pokupatel& a,pokupatel& b){return a.stoimost<b.stoimost;});
  33.  
  34.  
  35. //Выведу эту штуку
  36. cout<<" Svedeniya o pokupkah:\n\
  37. Imya Familia Karta Cena Nazvanie Obshaya cena\n\
  38. -----------------------------------------------------------------------\n";
  39. int o=0;
  40. for (auto a:massiv){
  41. 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));
  42. }
  43. }
  44.  
  45.  
  46.  
  47. void variant_2(){
  48. //Умный вариант
  49. //Если массив структур "покупатель" имеет дубликаты, и нужно из них собрать массив покупателей
  50.  
  51.  
  52. struct pokupatel{
  53. string famulia,imya,nomer_carti,naimenovanie;
  54. int stoimost;
  55. };
  56.  
  57. pokupatel massiv[]={ //Заданный масив структур покупатель
  58. {"Filatov","Andrey","3123-5235-6322-6232","Petrushka",20}, // |
  59. {"Mihailov","Sergey","7543-3457-2535-2321","Ukrop",30}, // | - эти ребята какую-то дичь купили
  60. {"Mihailov","Sergey","7543-3457-2535-2321","Moloko",90}, // |
  61. {"Mihailova","Elena","6236-2355-2366-6344","Moloko",90}, //Елена купила кучу спичек и молоко
  62. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  63. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  64. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  65. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  66. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  67. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  68. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  69. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  70. {"Mihailova","Elena","6236-2355-2366-6344","Spichki",3},
  71. {"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20}, //Света купила кучу петрушки и спички
  72. {"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
  73. {"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
  74. {"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
  75. {"Mihailova","Sveta","9999-8888-7777-5555","Petrushka",20},
  76. {"Mihailova","Sveta","9999-8888-7777-5555","Spichki",3},
  77. };
  78.  
  79. //--------------------------------------
  80.  
  81. std::unordered_map<string,int> bb;
  82. 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;
  83. using pp=std::pair<string,int>;
  84. std::vector<pp> arr{bb.begin(),bb.end()};
  85. std::sort(arr.begin(),arr.end(),[](auto& a, auto& b){return a.second<b.second; });
  86. for (auto a:arr)
  87. printf(" %-37s : %-5d\n",a.first.c_str(),a.second);
  88.  
  89. }
  90.  
  91.  
  92. int main(){
  93.  
  94. variant_2();
  95. // variant_1();
  96. return 0;
  97.  
  98. }
  99.  
Success #stdin #stdout 0s 4296KB
stdin
Standard input is empty
stdout
 3123-5235-6322-6232 Andrey Filatov    : 20   
 9999-8888-7777-5555 Sveta Mihailova   : 103  
 6236-2355-2366-6344 Elena Mihailova   : 117  
 7543-3457-2535-2321 Sergey Mihailov   : 120