2017-02-28 88 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; 
     } 
  • 我不能cout的線之下:「爲(自動N =克[U] .begin(); N = G [U] .end關於(! ); ++ n)「。沒有操作員 「<<」 匹配

  • 它說:「沒有運營商」< <「匹配這些操作數」。

  • 我允許使用C++ 2003

+3

n是一個迭代器。嘗試使用* n:cout << * n <<「」; –

+0

謝謝,我試過了,但它的工作,但系統說:「ISO C + +禁止宣佈'n'沒有類型」。 –

+2

@MartinHoang C++ 03沒有'auto'。 – LogicStuff

回答

1

你要打印一個迭代n。由於這沒有實現,你會得到一個編譯器錯誤。我認爲你有什麼以下幾點:

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

這將打印您正在使用的索引。您需要包含標題<iterator>

如果你什麼該索引打印件(node又名long)然後使用引用操作(*)像這樣:

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

更新:

由於您使用的是C++ 03,auto關鍵字不允許進行類型扣除。那麼你應該使用(在for循環聲明n時):

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

如果你想要的是打印出給定迭代器下一個值,那麼你必須使用它引用操作:

cout << *n <<" "; 
     ^~~~~ ! 
相關問題