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

时间:2018-05-02 09:02:08

标签: c++ brackets curly-braces square-bracket

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

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

这背后的逻辑意义是在(1,1)的位置为“游戏板”分配字符'X'。我不知道如何创建一个接收大括号的数组,如[{int,int}]。

我该怎么做?

P.S。 因为这些是符号而不是字符(因为我不认识任何属于这个问题的术语)在谷歌搜索这类问题非常困难,所以这可能是重复的:-(,希望不是。 / p>

我试着这样做:

首先尝试:

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;

第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 :(得分:7)

你需要做类似的事情:

    struct coord {
        int x;
        int y;
    };

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

答案 1 :(得分:2)

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

你的第二次尝试失败的原因与第一次相同(索引需要是整数),而第3次则由Tyker的回答纠正。