#include <map>
#include <tuple>
#include <iostream>

class NixeCopy {
public:
    NixeCopy(NixeCopy const&) = delete;
    NixeCopy(NixeCopy&&) = delete;
    NixeCopy& operator =(NixeCopy const&) = delete;
    NixeCopy& operator =(NixeCopy&&) = delete;

    NixeCopy(int a, int b) : a(a), b(b) {}

    int dings() const { return a + b; }

private:
    int a;
    int b;
};

int main() {
    std::map<int, NixeCopy> m;
    m.emplace(
        std::piecewise_construct,
        std::make_tuple(42),
        std::make_tuple(222, 444));

    auto it = m.find(42);
    if (it != m.end()) {
        std::cout << "found: " << it->second.dings() << "\n";
    } else {
        std::cout << "not found :(\n";
    }
}
