#include <iostream>
#include <unordered_map>
#include <utility>

struct Hasher
{
    int operator()(const std::pair<int, int>& p) const
    {
    	return p.first ^ (p.second << 7) ^ (p.second >> 3);
    }
};

int main()
{
	std::unordered_map<std::pair<int,int>, float, Hasher> m =
	{ { {1,3}, 2.3 },
	  { {2,3}, 4.234 },
	  { {3,5}, -2 },
	};
	
	// do a lookup
	std::cout << m[std::make_pair(2,3)] << '\n';
	// add more data
	m[std::make_pair(65,73)] = 1.23;
	// output everything
	for (auto& x : m)
	    std::cout << x.first.first << ',' << x.first.second << ' '
	        << x.second << '\n';
}