C++ (Qt)struct CMatrix { double m[16]; bool operator == ( const CMatrix & sec ) const { for (size_t i = 0; i < 16; ++i) if (fabs(m[i] - sec.m[i]) > epsilon) return false; return true; }};
bool operator < ( const CMatrix & sec ) const { return sum(m[0], m[15]) < sum(sec.m[0], sec.m[15]); }
size_t hash<CMatrix>(const CMatrix & M) { return hash<double>( round(sum(M.m), 16*epsilon) ); }// round(v, e) - округление числа v с точностью не больше e // с ходу для неё формула не придумывается...