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