错误:与'operator[]'不匹配(操作数类型为 'std::list<std::pair<int, int> >*' 和"std::p air<int, i



我正在尝试创建一个图形,其中每个节点都是一对两个int值。为此,我创建了一个 pii (pair<int, int>) 类型的列表adj。现在,当我尝试在列表中push_back pii类型节点时,它说

error: no match for 'operator[]' (operand types are 'std::list<std::pair<int, int> >*' and 'std::pair<int, int>')|

这是我的代码。(我还没有添加main()的边缘)。我已经包含了所有必要的标题。我已经搜索过,但找不到类似的错误。

#define pii pair<int, int>
#define lli long long int
using namespace std;
class graph
{
    lli v;
    list<pii> *adj;
    public:
    graph(lli v);
    void addEdge(pii n, pii m);
    void bfs(pii s);
};
graph::graph(lli v)
{
    this->v = v;
    adj = new list<pii >[v];
}
void graph::addEdge(pii n, pii m)
{
    adj[n].push_back(m);        //Error Line
}
void graph::bfs(pii s)
{
    bool visited[v];
    memset(visited, false, sizeof(visited));
    list<pii> q;
    list<pii>::iterator it;
    q.push_back(s);
    while(!q.empty())
    {
        pii temp = q.front();
        q.pop_front();
        for(it = adj[temp].begin() ; it != adj[temp].end() ; it++)
        {
            if(!visited[*it])
            {
                visited[*it] = true;
                q.push_back(*it);
            }
        }
    }
}
int main()
{
    int n, m, i, j;
    pii coordinates;
    cin>>n>>m;
    char input[n][m];
    for(i = 0 ; i < n ; i++)
    {
        for(j = 0 ; j < m ; j++)
        {
            cin>>input[i];
            make_pair(i, j);
        }
    }
    graph(n*m);
    return 0;
}
adj的类型

std::list<std::pair<int, int>>*,这是一个指针。指针实现以下operator[]

T & operator[](T *, std::ptrdiff_t);

您正在尝试调用以下内容:

T& operator(T*, std::pair<int, int>);

您需要使用有符号整数的 std::ptrdiff_t 类型调用 operator[]

void graph::addEdge(***int*** n, pii m)
{
    adj[n].push_back(m);        //Error Line
}

正如其他人所说,对你的问题的直接回答是你试图用pii索引指针(你#definedpair<int,int>),并且由于pii没有自动转换为整数,所以它不能用作索引。

从更广泛的角度来看,由于您的缩写变量和方法名称,很难看出您要做什么。您的意图是adj成为列表数组吗?如果是这样,你只需要将第一个参数更改为 addEdge to int ,以便它可以用作此数组的索引。但是从快速浏览方法bfs来看,看起来adj可能只是一个列表,在这种情况下,您可以从其声明中删除星号并消除其在图形构造函数中的赋值,并完全消除索引。或者,如果您要做的是将一个pii映射到另一个pii,则需要使用类似std::map而不是std::list

最新更新