Error: no match for 'operator[]' (operand types: 'std::list<std::pair<int, int> >*' und 'std::pair<int, int>')
Ich versuche ein Diagramm erstellen, wo jeder Knoten ein paar von zwei int
Werte. Für diese habe ich eine Liste adj
vom Typ pii (pair<int, int>)
. Wenn ich jetzt versuche zu push_back
ein pii-Typ-Knoten in der Liste heißt es
error: no match for 'operator[]' (operand types are 'std::list<std::pair<int, int> >*' and 'std::pair<int, int>')|
Hier ist mein code. ( Ich habe nicht Hinzugefügt, die Kanten von main()
noch). Ich habe alle notwendigen Header. Ich habe gesucht, aber nicht finden können, ein ähnlichen Fehler.
#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;
}
- Ähm... du weißt, du bist die Indizierung mit einem
std::pair<int,int>
geben Sie als Tiefgestellt, nicht einlong long int
, richtig? Schauen Sie sich die Art dern
(pii
), die Sie haben offenbar versucht, ausgiebig zu verstecken in einem makro. - Verschleierung geglückt ist. Nur nicht mit fremden Makros, und Sie werden in der Lage zu Lesen, Ihre eigenen code 😛
n
ist pii geben die nichts aberpair<int, int>
nur. Nicht sicher, was Sie versuchen zu sagen.- Er versucht zu sagen, dass Sie nicht verwenden können, eine
std::pair
index für ein array. Sie müssen eine ganze Zahl und vorzugsweise eine ganze Zahl ohne Vorzeichen. Array Speicherverluste und hilftgraph
verletzen die in der Regel aus Drei, durch die Art und Weise. Ich empfehle schlagen die Bücher zu Holen, einige der Grundlagen, bevor Sie zu gehen, viel weiter. Sieht aus wie Sie versucht habe, zu lernen, sich von der Konkurrenz-code, und es ist nicht tun Sie viel gutes. - Das macht Sinn. Ich werde versuchen, das zu ändern mein code. Ja, ich habe seit CP für einige Zeit (ad-hocs und Mathematik meistens). Vor kurzem begann die Graphentheorie daher die noob-Fehler. Schätzen Sie den Vorschlag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
adj
ist der Typstd::list<std::pair<int, int>>*
, das ist ein Zeiger. Zeiger implementieren Sie die folgendenoperator[]
Die Sie versuchen zu nennen, die folgenden:
Müssen Sie rufen Sie
operator[]
mit einer Art vonstd::ptrdiff_t
ist eine vorzeichenbehaftete Ganzzahl.Wie andere gesagt haben, ist die direkte Antwort auf deine Frage ist, dass Sie versuchen, index, einen Zeiger mit einem
pii
(was haben Sie#defined
alspair<int,int>
), und seit einpii
hat keine automatische Konvertierung in eine ganze Zahl, es kann nicht verwendet werden, als ein index.Blick auf die größeren Zusammenhänge, weil Ihr abgekürzt Variablen-und Methodennamen, es ist schwer zu sehen, was es ist Sie versuchen zu tun. Ist Ihre Absicht, dass
adj
ein array von Listen? Wenn ja, müssen Sie nur ändern Sie den ersten parameter zu addEdge zuint
, so dass es verwendet werden kann als ein index in diesem array. Aber von einem schnellen Blick durch die Methodebfs
wird, sieht es vielleichtadj
soll nur eine Liste, in welchem Fall Sie können entfernen Sie das Sternchen aus der Erklärung und die Beseitigung der Zuordnung in der Grafik-Konstruktor, und die Beseitigung der Indizierung zusammen. Oder wenn das, was Sie zu tun versuchen ist die Karte einepii
zu einem anderenpii
, würden Sie brauchen, um so etwas wiestd::map
stattstd::list
.adj
als ein array von Listen, wobei jede Liste speichert die benachbarten Knoten. Also habe ich versucht einzufügen benachbarten Knotenm
auf den aktuellen Knotenn
in das problem. Daher erklärte ichn
wie personenbezogene Daten (weil ein Knoten). Aber jetzt weiß ich, ich kann nicht Durchlaufen mit ein paar Wert, also muss ich wissen, wie Speichere ich paar Werte in der Liste und Durchlaufen Sie?bfs
Methode?