#include <iostream>
#include <memory>
#include <string>
#include <tuple>
#include <map>
struct Mocha {
std::string str;
};
class Govno {
std::map<std::tuple<int, int>, std::shared_ptr<Mocha>> map_;
public:
std::shared_ptr<Mocha> getMocha(int a, int b) {
auto item = map_.find({ a, b });
if(item == map_.end()) {
return nullptr;
}
return item->second;
}
void setMocha(int a, int b, std::string str) {
std::shared_ptr<Mocha> m;
auto item = map_.find({ a, b });
if(item != map_.end()) {
m = item->second;
} else {
const auto res = map_.insert({{ a, b }, std::make_shared<Mocha>()});
m = res.first->second;
}
m->str = std::move(str);
}
};
int main() {
auto pgovno = std::make_unique<Govno>();
pgovno->setMocha(42,42, "hui");
auto pmocha = pgovno->getMocha(42,42);
std::cout << pmocha->str << std::endl; //печатает hui
pgovno->setMocha(42, 42, "pizda");
std::cout << pmocha->str << std::endl; //печатает pizda
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDxtYXA+CgpzdHJ1Y3QgTW9jaGEgewoJc3RkOjpzdHJpbmcgc3RyOwp9OwoKY2xhc3MgR292bm8gewoJc3RkOjptYXA8c3RkOjp0dXBsZTxpbnQsIGludD4sIHN0ZDo6c2hhcmVkX3B0cjxNb2NoYT4+IG1hcF87CnB1YmxpYzoKCXN0ZDo6c2hhcmVkX3B0cjxNb2NoYT4gZ2V0TW9jaGEoaW50IGEsIGludCBiKSB7CgkJYXV0byBpdGVtID0gbWFwXy5maW5kKHsgYSwgYiB9KTsKCQlpZihpdGVtID09IG1hcF8uZW5kKCkpIHsKCQkJcmV0dXJuIG51bGxwdHI7CgkJfQoJCXJldHVybiBpdGVtLT5zZWNvbmQ7Cgl9Cgl2b2lkIHNldE1vY2hhKGludCBhLCBpbnQgYiwgc3RkOjpzdHJpbmcgc3RyKSB7CgkJc3RkOjpzaGFyZWRfcHRyPE1vY2hhPiBtOwoJCWF1dG8gaXRlbSA9IG1hcF8uZmluZCh7IGEsIGIgfSk7CgkJaWYoaXRlbSAhPSBtYXBfLmVuZCgpKSB7CgkJCW0gPSBpdGVtLT5zZWNvbmQ7CgkJfSBlbHNlIHsKCQkJY29uc3QgYXV0byByZXMgPSBtYXBfLmluc2VydCh7eyBhLCBiIH0sIHN0ZDo6bWFrZV9zaGFyZWQ8TW9jaGE+KCl9KTsKCQkJbSA9IHJlcy5maXJzdC0+c2Vjb25kOwoJCX0KCQltLT5zdHIgPSBzdGQ6Om1vdmUoc3RyKTsKCX0KfTsKCmludCBtYWluKCkgewoJYXV0byBwZ292bm8gPSBzdGQ6Om1ha2VfdW5pcXVlPEdvdm5vPigpOwoJcGdvdm5vLT5zZXRNb2NoYSg0Miw0MiwgImh1aSIpOwoJYXV0byBwbW9jaGEgPSBwZ292bm8tPmdldE1vY2hhKDQyLDQyKTsKCXN0ZDo6Y291dCA8PCBwbW9jaGEtPnN0ciA8PCBzdGQ6OmVuZGw7IC8v0L/QtdGH0LDRgtCw0LXRgiBodWkKCXBnb3Zuby0+c2V0TW9jaGEoNDIsIDQyLCAicGl6ZGEiKTsKCXN0ZDo6Y291dCA8PCBwbW9jaGEtPnN0ciA8PCBzdGQ6OmVuZGw7IC8v0L/QtdGH0LDRgtCw0LXRgiBwaXpkYQp9