すべてのノード (または頂点) がリストにまとめられた単純なグラフを作成しています。各ノードには、最初のリスト内の他の複数のノードを指し、これらのエッジを呼び出すことができるポインターのリストがあります。たとえば、単純なグラフがA -> B
ありA -> C
、Nodeがエッジ A
へのポインターのリストを持っているB
とします。C
グラフを作成するときは、まずノードを作成し、そのノードに関連するもの (重みやその他の属性) を入力します。次に、そのノードをすべてのノードの「マスター」リストに追加します。その後、そのノード (リストの最後のオブジェクト) のアドレスを関数に渡して、任意の親ノードに追加します。
AddChildNode(&MasterListOfNodes.back(), NameOfParent)
以下は、子ノードを親に追加するためのコードです
void GraphReader::AddChildNode(Vertex * const aChildVertex, const string aParent)
{
for(list<Vertex>::iterator it = MasterListOfNodes.begin(); it != MasterListOfNodes.end(); it++)
{
if(it -> getName().compare(aParent) == 0)
{
it -> addEdge(aChildVertex);
break;
}
}
}
addEdge は単に新しい子を親の「エッジ」リストに追加します。
const void Vertex::addEdge(Vertex * aEdge) {mEdges.push_back(aEdge);}
私が抱えている問題は、エッジのリストが、リスト自体内の実際のオブジェクトではなく、リスト オブジェクトのコピーを指していることです。
注: ルート ノードのアドレス (コマンド プロンプト出力) は、次のように検出されました。
for (list<Vertex>::iterator it = MasterListOfNodes.begin(); it != MasterListOfNodes.end(); it++)
{
cout << "Name: " << it->getName() << " | Address: {" << &(*it) << "}" << endl;
}
マスター ノードを指すエッジのリストを作成するにはどうすればよいですか?