如何显示图形邻接列表的元素?
How to display the elements of a graph's adjacency list?
我仍在学习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;
}
我的问题是如何从该调整列表中获取顶点名称?预先感谢您!
您的问题似乎是 li
是指指的迭代器,因此您需要将其删除以访问成员name
:
cout << (*li)->name << " ";
您不需要为您的顶级迭代器itr
执行此操作的原因是它是std::pair
'S的迭代器,因此您的->
访问权限访问了迭代器,以获取std::pair
成员。
@ehudt的答案通过使用基于C 11范围的for
循环解决此问题,以便->
操作员在*Vertex
上,而不是list<Vertex*>::iterator
。
撰写本文的一种更简单的方法是:
for(const auto& vm_pair : g1.vm)
{
cout << vm_pair.first << " ";
for (const auto& li : vm_pair.second->adj)
{
cout << li->name << " ";
}
cout << endl;
}
相关文章:
- C++如何通过用户输入删除列表元素
- 通过动态分配插入列表元素
- 用于编织链接列表元素的Runner Technique
- 无法在C 中删除列表元素
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 将列表元素移动到列表末尾的函数多次不起作用
- 交换链接列表元素
- 当删除列表元素时,在迭代器结束时会发生什么
- 为什么从不同分配器的列表中剪辑列表元素时会有错误消息?以及如何解决
- 打印出列表元素问题
- 我想通过递归获取列表元素的所有置换
- 从C++访问列表元素 (QML) 颜色
- 如何在C++visual studio 2013中将列表元素转换为文本块
- 指向删除后的列表元素的指针
- 正在将指针复制到assign运算符中的另一个列表元素
- 将列表元素插入向量,C++获取其他不需要的值
- 从unordered_set中删除列表元素
- 在C++中打印列表元素的组件
- 提取并转换 boost::p ython::list 的列表元素
- Rcpp犰狳:对列表元素的"-="操作