Никак не получается пройти тесты на Яндекс контесте. Сама задача -
Напишите структуру:
struct Circle {
int x, y, r;
char color;
Circle(int x, int y, int r, char color);
}
В этой задаче мы считаем, что два круга равны, если у них совпадают обе координаты, а также
радиус. Круги могут быть двух разных цветов, но если всё остальное совпадает, эти круги
считаются равными
Пример теста:
std::unordered_set<Circle> st;
Circle blue1(5, 6, 7, 'b');
Circle red1(5, 6, 7, 'r');
Circle blue2(6, 5, 7, 'b');
Circle red2(1, 1, 1, 'r');
st.insert(blue1);
assert(st.size() == 1);
st.insert(blue2);
assert(st.size() == 2);
st.insert(red1);
assert(st.size() == 2);
st.insert(red2);
assert(st.size() == 3);
Задача не была бы настолько простой, если бы не следующее:
Подружите эту структуру с std::unordered_set. Иными словами, необходимо написать такой код,
который позволил бы использовать структуру Circle вместе с std::unordered_set, не указывая
никакие дополнительные шаблонные параметры, кроме самого Circle
Моё решение:
#include<unordered_set>
#include<cassert>
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<Circle> {
size_t operator()(const Circle& c) const {
std::hash<int> hash_int;
std::hash<char> hash_char;
return hash_int(c.x) ^ hash_int(c.y) ^ hash_int(c.r) ^ hash_char(c.color);
}
};
Тест из задачи проходит, когда отправляю в систему прилетает RE
Уверен, что это из-за хеширования.