c++ - 没有运算符“[]”匹配这些操作数的字符串
问题描述
我正在尝试实现 aGraph
并且错误表明字符串没有操作数 [],但文档似乎另有说明。
这是我的代码,它显示了函数的错误addEdge
class Graph
{
list<string> *adj;
void printAllPathsUtil(int, int, bool[], int[], int &);
public:
Graph();
void addEdge(string u, string v);
void printAllPaths(string s, string d);
};
Graph:: Graph()
{
adj = new list<string>;
}
void Graph::addEdge(string u, string v)
{
adj[u].push_back(v); //
}
任何有关如何解决此问题的建议将不胜感激。
编辑:这是完整的错误
no operator "[]" matches these operands -- operand types are: std::__cxx11::list<std::string, std::allocator<std::string>> * [ std::string ]
解决方案
adj
是一个指向动态分配的指针list
(为什么是动态的?这不是必须的)。但是您将其视为由字符串索引的数组,这将永远无法正常工作。您不能使用字符串索引指针/数组,只能使用整数。
如果要存储由字符串键入的值列表,请改用 a std::(unordered_)map
,即:
#include <string>
#include <list>
#include <map>
class Graph
{
std::map<std::string, std::list<std::string>> adj;
...
public:
Graph() {}
void addEdge(std::string u, std::string v);
...
};
void Graph::addEdge(std::string u, std::string v)
{
adj[u].push_back(v); // <-- this works now!
}
推荐阅读
- sonarqube - 即使覆盖率为 100%,SonarQube 门也失败
- python - 从现有检查点创建集线器模块
- c# - c# 在绑定之前更改属性值
- javascript - 如何编辑数据表 json 响应?
- java - 基于声明值的 url 的 Spring Security 授权
- ironpython - 带有 IronPython 的 Openpyxl:“序列”对象不可下标
- css - 如果使用基础,如何更改输入文本占位符颜色
- node.js - 错误:SecurityError:请求方法不允许 - XMLHTTPRequest - NodeJS
- html - 如何在 Angular 中正确对齐所有内容?
- c++ - 静态类变量的多重定义