#include <iostream>
#include<complex>
#include<map>
#include<unordered_map>
#include<array>

template<typename T> struct less{};

template<typename T>
struct less<std::complex<T> >
{
	bool operator()(std::complex<T> const& a, std::complex<T> const& b)
	{
		return std::array<T,2>{a.real(),a.imag()} < std::array<T,2>{b.real(),b.imag()};
	}
};

int main()
{
	std::map<std::complex<double>, int, less<std::complex<double> > > m;

	m[std::complex<double>(1.0,0.0)]=1;
	m[std::complex<double>(0.0,1.0)]=2;
	m[{0.5,0.5}]=3;

	return 0;
}