#include <unordered_map>
#include <string>
#include <tuple>
#include <functional>
#include <cstddef>
#include <iostream>

struct myStruct
{
	int x;
	int y;
};
using Key = std::pair<std::string, std::string>;
namespace something
{
	struct Compare
	{
		std::size_t operator()(const Key& string_pair) const
		{
		    // just to demonstrate the comparison.
			return std::hash<std::string>{}(string_pair.first) ^
                    std::hash<std::string>{}(string_pair.second);
		}
	};
}
using myMap = std::unordered_map<Key, myStruct, something::Compare>;

int main()
{
	myMap mp =
	{
		{ { "name1", "name2" },{ 3,4 } },
		{ { "aame1", "name2" },{ 8,4 } },
		{ std::make_pair("fame1", "name2"),{ 2,4 } }, // or make pair
		{ std::make_pair("fame1", "bame2"),{ 1,2 } }
	};

	for(const auto& it: mp)
    {
        std::cout << it.first.first << " " << it.first.second << " "
                 << it.second.x << " " << it.second.y << std::endl;
    }

	return 0;
}