创建一个可以接收 board1[{1,1}]='X' 的 class; ? (方括号内的大括号)

creating a class that can receive board1[{1,1}]='X'; ? (curly brackets inside square brackets)

我得到了H.W。在 main.cpp 的其中一行中,我想支持:

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

这背后的逻辑意义是将(1,1)位置的字符'X'赋值给一个"game board"。我不知道如何创建一个接收大括号的数组,例如 [{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;

第二次尝试:

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

第三次尝试:

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

您需要执行以下操作:

    struct coord {
        int x;
        int y;
    };

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

您的第一次尝试非常接近实际工作。问题是向量的 [] 运算符将整数索引放入向量中要更改的位置(并且向量必须足够大才能存在)。但是,您想要的是一张地图;这将创建项目并为您分配它。因此 std::map<std::vector<int>, char> 会得到你想要的。 (虽然它可能没有最好的性能)。

您第二次尝试失败的原因与第一次相同(索引需要是整数),第三次已通过 Tyker 的答案更正。