#include <iostream>
#include <map>
#include <tuple>
#include <string>
using namespace std;

struct demo{
	int x;
};

inline bool operator< (const demo& lhs, const demo& rhs){ 
	return lhs.x < rhs.x;
}

int main() {
	std::map<std::tuple<int,string,demo> ,int> a;
	a.emplace(std::make_tuple(1,"a",demo {5}),1);
	a.emplace(std::make_tuple(1,"a",demo {6}),2);
	a.emplace(std::make_tuple(1,"b",demo {5}),3);
	a.emplace(std::make_tuple(2,"a",demo {5}),4);
	
	if(a.count(std::make_tuple(2,"a",demo {5}) )){
		cout << a[std::make_tuple(2,"a",demo {5})] << endl;
	}
	if(a.count(std::make_tuple(2,"c",demo {5}))){
		cout << a[std::make_tuple(2,"a",demo {5})] << endl;
	} else {
		cout << "Not there..." << endl;
	}
	return 0;
}