gpt4 book ai didi

c++ - 如何显示图的邻接表的元素?

转载 作者:行者123 更新时间:2023-11-28 05:10:58 25 4
gpt4 key购买 nike

我还在学习c++,想寻求一些帮助。我有以下图形表示:

struct Vertex
{
list<Vertex*> adj;
string name;
Vertex(string str) : name(str) {}
};

class Graph
{
public:
typedef map<string, Vertex*> vmap;
vmap vm;
void AddVertex(const string&);
void AddEdge(const string& from, const string& to);
};

我的使用方式:

Graph g1;
g1.AddVertex("2");
g1.AddVertex("3");
g1.AddVertex("4");
g1.AddVertex("1");
g1.AddEdge("1", "2");
g1.AddEdge("1", "3");
g1.AddEdge("1", "4");

现在我想简单地计算顶点和它们的连接(如果存在的话)来检查它是否像我预期的那样工作。我尝试了以下方法,但出现了一个我不完全理解并且不知道如何修复的错误:

map<string, Vertex*>::iterator itr = g1.vm.begin();
for(itr; itr != g1.vm.end(); itr++)
{
cout << itr->first << " ";
list<Vertex*>::iterator li = itr->second->adj.begin();
for(li; li != itr->second->adj.end(); li++)
{
cout << li->name << " ";
}
cout << endl;
}

我的问题是如何从该 adj 列表中获取顶点名称?提前致谢!

最佳答案

您的问题似乎是 li是指针的迭代器,因此您需要取消引用它才能访问成员 name :

cout << (*li)->name << " ";

您不需要为顶级迭代器执行此操作的原因,itr ,它是 std::pair 的迭代器吗?的,因此你的 -> access 取消引用迭代器以获取 std::pair 的成员.

@ehudt 的回答通过使用 c++11 range based for 解决了这个问题循环使得 ->接线员在 *Vertex而不是 list<Vertex*>::iterator .

关于c++ - 如何显示图的邻接表的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com