#include <iostream>
#include <string>
#include <map>
struct Person {
std::string name;
std::string surname;
Person(const std::string& nm, const std::string& snm)
:name{ nm }, surname{ snm }
{}
friend
std::ostream& operator<<(std::ostream& out, const Person& person)
{
return out << person.name << ", " << person.surname << ": ";
}
};
struct Account {
std::string bankName;
double balance;
Account(const std::string& bnm, double bal)
:bankName{ bnm }, balance{ bal }
{}
friend
std::ostream& operator<<(std::ostream& out, const Account& account)
{
return out << "Nazwa banku: " << account.bankName
<< ", saldo: " << account.balance;
}
};
struct AccCmp {
bool operator()(const Person& left, const Person& right) {
if (left.surname < right.surname)
return true;
else if (left.surname == right.surname && left.name < right.name)
return true;
else
return false;
}
};
void printAccounts(const std::map<Person, Account, AccCmp>& coll)
{
for (auto const& item : coll) {
std::cout << item.first << item.second << '\n';
}
}
int main()
{
std::map<Person, Account, AccCmp> accounts{
{Person{"John", ""}, Account{"PKO", 1200}},
{Person{"Marry", "Mm"}, Account{"BGZ", 1500}},
{Person{"Marry", "Mmm"}, Account{"BGZ", 1800}},
{Person{"Kevin", ""}, Account{"BPH", 2236.16}},
{Person{"Antonio", ""}, Account{"BRE", 111.23}}
};
printAccounts(accounts);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgoKc3RydWN0IFBlcnNvbiB7CiAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgc3RkOjpzdHJpbmcgc3VybmFtZTsKICAgIFBlcnNvbihjb25zdCBzdGQ6OnN0cmluZyYgbm0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBzbm0pCiAgICAgICAgOm5hbWV7IG5tIH0sIHN1cm5hbWV7IHNubSB9CiAgICB7fQogICAgZnJpZW5kIAogICAgICAgIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgUGVyc29uJiBwZXJzb24pCiAgICB7CiAgICAgICAgcmV0dXJuIG91dCA8PCBwZXJzb24ubmFtZSA8PCAiLCAiIDw8IHBlcnNvbi5zdXJuYW1lIDw8ICI6ICI7CiAgICB9Cn07CgpzdHJ1Y3QgQWNjb3VudCB7ICAgIAogICAgc3RkOjpzdHJpbmcgYmFua05hbWU7CiAgICBkb3VibGUgYmFsYW5jZTsKICAgIEFjY291bnQoY29uc3Qgc3RkOjpzdHJpbmcmIGJubSwgZG91YmxlIGJhbCkKICAgICAgICA6YmFua05hbWV7IGJubSB9LCBiYWxhbmNleyBiYWwgfQogICAge30KICAgIGZyaWVuZAogICAgICAgIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgQWNjb3VudCYgYWNjb3VudCkKICAgIHsKICAgICAgICByZXR1cm4gb3V0IDw8ICJOYXp3YSBiYW5rdTogIiA8PCBhY2NvdW50LmJhbmtOYW1lCiAgICAgICAgICAgIDw8ICIsIHNhbGRvOiAiIDw8IGFjY291bnQuYmFsYW5jZTsKICAgIH0KfTsKCnN0cnVjdCBBY2NDbXAgewogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFBlcnNvbiYgbGVmdCwgY29uc3QgUGVyc29uJiByaWdodCkgewogICAgICAgIGlmIChsZWZ0LnN1cm5hbWUgPCByaWdodC5zdXJuYW1lKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBlbHNlIGlmIChsZWZ0LnN1cm5hbWUgPT0gcmlnaHQuc3VybmFtZSAmJiBsZWZ0Lm5hbWUgPCByaWdodC5uYW1lKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfTsKCnZvaWQgcHJpbnRBY2NvdW50cyhjb25zdCBzdGQ6Om1hcDxQZXJzb24sIEFjY291bnQsIEFjY0NtcD4mIGNvbGwpCnsKICAgIGZvciAoYXV0byBjb25zdCYgaXRlbSA6IGNvbGwpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgaXRlbS5maXJzdCA8PCBpdGVtLnNlY29uZCA8PCAnXG4nOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6bWFwPFBlcnNvbiwgQWNjb3VudCwgQWNjQ21wPiBhY2NvdW50c3sKICAgICAgICB7UGVyc29ueyJKb2huIiwgIiJ9LCBBY2NvdW50eyJQS08iLCAxMjAwfX0sCiAgICAgICAge1BlcnNvbnsiTWFycnkiLCAiTW0ifSwgQWNjb3VudHsiQkdaIiwgMTUwMH19LAogICAgICAgIHtQZXJzb257Ik1hcnJ5IiwgIk1tbSJ9LCBBY2NvdW50eyJCR1oiLCAxODAwfX0sCiAgICAgICAge1BlcnNvbnsiS2V2aW4iLCAiIn0sIEFjY291bnR7IkJQSCIsIDIyMzYuMTZ9fSwKICAgICAgICB7UGVyc29ueyJBbnRvbmlvIiwgIiJ9LCBBY2NvdW50eyJCUkUiLCAxMTEuMjN9fQogICAgfTsKICAgIHByaW50QWNjb3VudHMoYWNjb3VudHMpOwp9