没有运算符“<<”匹配
no operator "<<" matches
#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;
}
我无法在线下计算:"for( auto n = g[u].begin(); n!=g[u].end();++n )"。
它说:"no operator "<<“匹配这些操作数”。
我可以使用c++2003
您正在尝试打印迭代器 n
。由于这没有实现,你会得到一个编译器错误。以下是我认为你是什么:
std::cout << std::distance(g[u].begin(), n) << std::endl;
这将打印您正在使用的索引。您需要包含 header <iterator>
.
如果您想在该索引处打印元素(node
又名 long
),则使用取消引用运算符(*
),如下所示:
std::cout << *n << std::endl;
更新:
由于您使用的是 C++03,auto
关键字不允许用于类型推导。然后您应该使用(在 for-loop 中声明 n
时):
Dothi::iterator n = g[u].begin();
如果您想要在给定迭代器下打印一个值,那么您必须在其上使用解引用运算符:
cout << *n <<" ";
^ ~~~~ !
#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;
}
我无法在线下计算:"for( auto n = g[u].begin(); n!=g[u].end();++n )"。
它说:"no operator "<<“匹配这些操作数”。
我可以使用c++2003
您正在尝试打印迭代器 n
。由于这没有实现,你会得到一个编译器错误。以下是我认为你是什么:
std::cout << std::distance(g[u].begin(), n) << std::endl;
这将打印您正在使用的索引。您需要包含 header <iterator>
.
如果您想在该索引处打印元素(node
又名 long
),则使用取消引用运算符(*
),如下所示:
std::cout << *n << std::endl;
更新:
由于您使用的是 C++03,auto
关键字不允许用于类型推导。然后您应该使用(在 for-loop 中声明 n
时):
Dothi::iterator n = g[u].begin();
如果您想要在给定迭代器下打印一个值,那么您必须在其上使用解引用运算符:
cout << *n <<" ";
^ ~~~~ !