首页 > 解决方案 > 没有运算符“[]”匹配这些操作数的字符串

问题描述

我正在尝试实现 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 ]

标签: c++

解决方案


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

推荐阅读