没有可行的超载运算符[]

No viable overloaded operator[] for type

本文关键字:运算符 超载      更新时间:2023-10-16

我已经定义了一种类型:

typedef unordered_map<string, list<string>> Graph;

我有一个钥匙:

string v = "A12";

尝试使用键访问列表时:

for (auto w = g[v].begin(); w != g[v].end(); w++)
    {
        ...
    }

g是类型Graph,我得到错误:

No viable overloaded operator[] for type 'const Graph'

如何解决此问题?

问题是gconst graph&。索引运算符[]可能需要为地图创建一个新元素,从而将其突变。这就是为什么您不能在const graph&上使用它(问题是const)。

您可以使用g.at(key),而不是如果不存在键,则会引发异常。