没有运算符“<<”匹配

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;
        }

您正在尝试打印迭代器 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 <<" ";
        ^ ~~~~ !