C/C++

СРОЧНО! Помогите с задачей.

Помогите с задачей C++
Описать структуру с информацией о зарубежных разговора абонентов с полями:
имя, название страны, в которой осуществлялся звонок, продолжительность разговора в секундах.
Составить функции:

1) для определения продолжительности всех иностранных разговоров по каждому
абоненту;
2) для вывода на экран списка абонентов по странам;
3) для определения страны с наименьшим объемом разговоров абонентов.
Задание 1
Для каждой функции по варианту: задачи; программный код функции; набор
тестовых данных для проверки работы (таблицы с шапкой - тегом
структуры и данными из файла)
ожидаемые результаты выполнения (результаты, полученные вручную)
результаты работы программы и их анализ по сравнению с ожидаемыми;

Задание 2
Для каждого вида алгоритмов:
название вида алгоритмов;
для каждой алгоритма: теоретическое описание алгоритма, сформулированное
задачи, программный код, набор тестовых данных для проверки работы
алгоритма (таблицы с шапкой - тегом структуры и данными из файла) ожидаемые результаты выполнения (результаты, полученные вручную) результаты работы алгоритма и их анализ по сравнению с ожидаемыми;
текст программы.
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;
struct Subscriber {
unsigned time;
string name;
string code;
Subscriber() : time(0) {}
Subscriber& operator+=(const Subscriber& s) {
if (name == s.name && code == s.code) time += s.time;
return *this;
}
friend bool operator<(const Subscriber& a, const Subscriber& b) {
return a.name < b.name;
}
friend bool operator==(const Subscriber& a, const Subscriber& b) {
return a.name == b.name && a.code == b.code;
}
friend istream& operator>>(istream& inp, Subscriber& s) {
return inp >> s.name >> s.code >> s.time;
}
friend ostream& operator<<(ostream& out, const Subscriber& s) {
out << left << setw(16) << s.name << ' '
<< right << setw(3) << s.code << ' '
<< setw(6) << s.time;
return out;
}
};
class Listing {
public:
void add(const Subscriber& s) {
auto iter = find(box.begin(), box.end(), s);
if (iter != box.end()) *iter += s;
else box.emplace_back(s);
}
void order() {
sort(box.begin(), box.end());
}
void show()const {
auto n = 0;
for (const auto& x : box) {
cout << setw(3) << ++n << ". " << x << '\n';
}
}
private:
vector<Subscriber> box;
};
unsigned integer(const char* msg) {
cout << msg;
unsigned value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
Listing sheet;
auto n = integer("Quantity: ");
cout << "Insert list of records: ";
for (auto i = 0U; i < n; ++i) {
Subscriber ss;
cin >> ss;
sheet.add(ss);
}
system("cls");
sheet.order();
sheet.show();
}

Input:

Quantity: 34
Insert list of records:
Eric US 8
Butters UA 11
Kyle UK 7
Stan AU 24
Butters AU 36
Eric US 12
Stan UA 18
Eric UK 8
Butters UA 14
Stan AU 5
Stan UA 26
Butters AU 17
Eric US 27
Randy US 6
Stan UA 15
Butters UA 17
Eric UK 36
Stan UA 42
Randy US 9
Kyle UK 14
Stan AU 12
Butters UA 23
Eric US 32
Randy US 13
Stan UA 34
Butters AU 12
Eric UK 11
Butters UA 6
Butters AU 23
Stan AU 20
Randy US 18
Kyle UK 9
Butters UA 27
Stan UA 9

Output:

1. Butters UA 98
2. Butters AU 88
3. Eric US 79
4. Eric UK 55
5. Kyle UK 30
6. Randy US 46
7. Stan AU 61
8. Stan UA 144
Дмитрий Зайцев
Дмитрий Зайцев
99 319
Лучший ответ
Это на фриланс. Тут писанины не оберешься...