В настоящее время я пытаюсь использовать структуру, содержащую координаты (x, y), и столкнулся с проблемой моей карты, объявленной map<coordinate, bool>
, где координата - это позиция, а bool - заполнена она или нет.
Моя структура:
typedef struct coordinate {
int x;
int y;
friend bool operator>(const coordinate c1, const coordinate c2) {
return c1.x > c2.x;
}
friend bool operator<(const coordinate c1, const coordinate c2) {
return c1.x < c2.x;
}
friend ostream& operator<<(ostream &os, const coordinate c1) {
os << "(" << c1.x << "," << c1.y << ")";
return os;
}
friend bool operator==(const coordinate c1, const coordinate c2) {
return c1.x == c2.x && c1.y == c2.y;
}
} coordinate;
и метод, который я использую map::find
в:
bool Board::Insert(int playerID, int x, int y){
if(x > M || y > M){
outOfBoundsError();
return false;
}
else if(playerMap.find(playerID) != playerMap.end()){
cout << "Player with ID " << playerID << " already exists\n";
return false;
}
else {
coordinate pos;
pos.x = x;
pos.y = y;
if(gameMap.find(pos) == gameMap.end()){
Player newPlayer = Player(playerID, pos);
gameMap[pos] = true;
playerMap[playerID] = pos;
N++;
return true;
}
else {
cout << "Player already exists at position " << pos << "\n";
}
return false;
}
}
Я не уверен, что мне не хватает чего-то простоготакой как перегрузка оператора, которая должна быть сделана, но я не могу найти, как сравниваются значения в функции map::find
.