Сам допёр до решения. Дело было в том, что не надо было хешировать color, т.к. с разным цветом круги считаются равными.
Вот готовое решение:
#include
#include
struct Circle {
int x, y, r;
char color;
Circle(int x, int y, int r, char color) : x(x), y(y), r(r), color(color) {}
bool operator== (const Circle& another) const{
return (x == another.x) && (y == another.y) && (r == another.r);
}
};
template <>
struct std::hash {
size_t operator()(const Circle& c) const {
size_t hash = 17;
hash = hash * 31 + std::hash()(c.x);
hash = hash * 31 + std::hash()(c.y);
hash = hash * 31 + std::hash()(c.r);
return hash;
}
};