- #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