2017-02-28 6 views
1
#include<iostream> 
#include<set> 
#include<unordered_map> 

using namespace std; 

typedef long Node; 

typedef unordered_map<Node, set<Node> > Dothi; 

Dothi g; 

while (n--) 
{ 
    Node u, i; 
    int choose; 
    cin >> choose; 
    if (choose == 1) 
    { 
     cin >> u >> i; 
     cout << (Lienke(u, i) ? "TRUE" : "FALSE"); 
    } 

    checkCase2 = false; 

    if (choose == 2) 
    { 
     cin >> u; 
     for ( auto n = g[u].begin(); n!=g[u].end();++n) 
     { 
      cout << n <<" "; //Error here, cant cout n 
      checkCase2 = true; 
     } 
  • ich nicht unter der Leitung cout kann: „für (auto n = g [u] .begin(); n = g [u] .end (!); ++ n) ".kein Operator "<<" Spiele

  • Es heißt: "kein Operator" < < "passt diese Operanden".

  • Ich darf C++ 2003

+3

n ist ein Iterator. Versuchen Sie es mit * n: cout << * n << ""; –

+0

Vielen Dank, ich habe versucht und es hat funktioniert, aber das System sagte: "ISO C++ verbietet die Deklaration von 'n' ohne Typ". –

+2

@MartinHoang C++ 03 hat kein 'auto'. – LogicStuff

Antwort

1

Sie versuchen n einen Iterator zu drucken. Da dies nicht implementiert ist, erhalten Sie einen Compilerfehler. Was ich denke, was die folgende ist:

std::cout << std::distance(g[u].begin(), n) << std::endl; 

Damit wird der Index druckt mit dem Sie arbeiten. Sie benötigen die Kopfzeile <iterator>.

Wenn Sie, was das Element drucken (node aka long) an diesem Index dann verwenden Sie den Dereferenzierungsoperator (*) wie folgt:

std::cout << *n << std::endl; 

Update:

Da Sie verwenden C++ 03, das Schlüsselwort auto ist für den Typabzug nicht erlaubt. Sie sollten dann verwenden (wenn n in der for-Schleife erklärt):

Dothi::iterator n = g[u].begin(); 
3

Wenn das, was wollten Sie war ein Wert unter dem angegebenen Iterator drucken, dann müssen Sie Dereferenzierungsoperator auf sie aus:

cout << *n <<" "; 
     ^~~~~ !