Ich versuche, ein Diagramm zu erstellen, wo jeder Knoten ist ein Paar von zwei int
Werten. Dazu habe ich eine Liste adj
vom Typ pii (pair<int, int>)
erstellt. Nun, wenn ich zu push_back
einen PII-Typ-Knoten in der Liste versuchen, sagt esFehler: keine Übereinstimmung für 'operator []' (Operandentypen sind 'std :: list <std :: pair <int, int>> *' und 'std :: pair <int, int>')
error: no match for 'operator[]' (operand types are 'std::list<std::pair<int, int> >*' and 'std::pair<int, int>')|
Hier mein Code. (Ich habe die Kanten noch nicht von main()
hinzugefügt). Ich habe alle notwendigen Header eingefügt. Ich habe gesucht, kann aber keinen ähnlichen Fehler finden.
#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;
}
Um ... Sie wissen, dass Sie mit einem 'std :: pair' Typ als den Index, nicht ein 'long long int ', richtig? Schau dir den * Typ * von 'n' (' pii') an, den du anscheinend ausgiebig versucht hast, ihn in einem Makro zu verstecken. –
WhozCraig
Verschleierung erfolgreich. Verwende keine seltsamen Makros und du wirst in der Lage sein, deinen eigenen Code zu lesen: P – user463035818
@WhozCraig 'n' ist ein Pii-Typ, der nur" Paar "ist. Nicht sicher, was du sagen willst. –
Sarthak