Карта соответствует только половине ключа, содержащегося в структуре - PullRequest
0 голосов
/ 17 октября 2018

В настоящее время я пытаюсь использовать структуру, содержащую координаты (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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...