在 STL 队列中插入对元素时出错

Error in inserting pair element in STL queue

我有一个元素对队列,我用它在矩形网格上执行 BFS。但是我在队列上进行推送操作时出错,尽管我在其他地方执行类似操作。

代码:

int get_ind(int &ii,int &jj,int i,int j,int x)
{
    queue <pair<int,int> > q;
    q.push({i,j});
    while(!q.empty())
    {
        int ti = q.front().first;
        int tj = q.front().second;
        q.pop();

        for(int p=-1; p<=1; p++)
        {
            for(int q=-1; q<=1; q++)
            {
                ii = ti+p;
                jj = tj+q;
                if(issafe(ii,jj))
                {
                    q.push({ti+p,tj+q});
                    if (arr[ii][jj]==x)
                        return 0;
                }
            }
        }
    }
}

错误:

error: request for member 'push' in 'q', which is of non-class type 'int'
                     q.push({ti+p,tj+q});

您在循环中隐藏 q

queue <pair<int,int> > q;
// later
for(int q=-1; q<=1; q++)

在循环中使用不同的变量名。

变量q 已重新声明为int 并且同样用于推送操作。在下面的 for 循环或队列声明中使用不同的变量。

for(int q=-1; q<=1; q++)
{
    ii = ti+p;
    jj = tj+q;
    if(issafe(ii,jj))
    {
        q.push({ti+p,tj+q});
        if (arr[ii][jj]==x)
            return 0;
    }
}

q的数据类型将是for循环范围内的int。