создание класса, который может получить board1 [{1,1}] = 'X'; ? (фигурные скобки внутри квадратных скобок) - PullRequest
0 голосов
/ 02 мая 2018

Я получил H.W. что в одной из строк main.cpp я должен поддерживать:

board1[{1,1}]='X';

логический смысл этого заключается в том, чтобы присвоить "игровому полю" символ 'X' в позиции (1,1). Я понятия не имею, как создать массив, который получает фигурные скобки, такие как [{int, int}].

Как я могу это сделать?

P.S. так как это символы, а не символы (и так как я не распознаю ни одного термина, относящегося к этой проблеме), очень трудно найти этот тип проблемы в Google, так что это может быть дубликатом :-(, надеюсь, нет.

Я пытался сделать:

первая попытка:

vector<vector<int> > matrix(50);
for ( int i = 0 ; i < matrix.size() ; i++ )
    matrix[i].resize(50);
matrix[{1,1}]=1;

2-я попытка:

int mat[3][3];
//maybe map
mat[{1,1}]=1;

3-я попытка:

class _mat { // singleton
    protected:
       int i ,j;

    public:
        void operator [](string s)
        {
            cout << s;
        }
};

_mat mat;
string s = "[{}]";
mat[s]; //this does allow me to do assignment also the parsing of the string is a hustle

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Ваша первая попытка была довольно близка к работе. Проблема в том, что оператор [] для вектора переводит целочисленный индекс туда, где в векторе вы хотите изменить (и вектор должен быть достаточно большим, чтобы существовать). Однако вы хотели карту; который создаст элемент и назначит его для вас. Таким образом std::map<std::vector<int>, char> получил бы то, что вы хотели. (хотя это может быть и не самая лучшая производительность).

Ваша вторая попытка потерпела неудачу по той же причине, что и первая (индекс должен быть целым числом), а третья исправлена ​​ответом Тайкера.

0 голосов
/ 02 мая 2018

вам нужно сделать что-то вроде:

    struct coord {
        int x;
        int y;
    };

    class whatever
    {
        public:
            //data being what you have in your board
            data& operator[] (struct coord) {
                //some code
            }
    };
...