class Graph { public: unordered_map<string, Station*> stations; // 地铁站站点集合 public: // 添加地铁站 void addStation(string name, vector<string> lines) { Station* station = new Station; // 创建一个新的站点对象 station->name = name; // 设置站点名称 station->lines = lines; // 设置站点所属的地铁线路 stations[name] = station; // 将新的站点对象添加到地铁站站点集合中,以站点名称作为键值 }为什么能用string作为stations[name]的下标
时间: 2024-04-17 09:28:49 浏览: 131
在C++中,可以使用不仅限于整数类型的值作为数组或容器的下标。这是因为C++标准库提供了一个模板类`std::unordered_map`,它是一个哈希表,允许使用不同类型的值作为键。在这种情况下,`stations`是一个`std::unordered_map`类型的对象,它的键类型是`string*`指针,值类型是`Station*`指针。
哈希表是一种数据结构,它使用哈希函数将键映射到数组索引中。因此,当使用`stations[name]`时,`name`会被哈希函数处理,并且返回相应的数组索引。这样,就可以将一个字符串作为键来访问和操作哈希表中的值。
需要注意的是,为了使字符串能正常作为键,`unordered_map`需要一个哈希函数来计算字符串的哈希值。C++标准库提供了默认的哈希函数`std::hash<std::string>`,可以正确地处理字符串类型。如果需要自定义哈希函数,可以提供自己的哈希函数或使用现有的哈希函数库来处理字符串类型。
阅读全文