简体   繁体   English

需要帮助找出适用于我的数据结构的语法

[英]Need help finding out what syntax works with my data structure

I am trying to implement an Adjacent list using an array of linked lists: 我正在尝试使用一系列链接列表来实现相邻列表:

vector< list<Edge> > adjList;

at the moment, I cannot get it to compile because I am not quite sure how to access the 目前,我无法编译它,因为我不太确定如何访问

vertex or even the weight of my nested class, Edge . 顶点或什至是我嵌套类Edge的权重。 This is the error output... 这是错误输出...

Graph.cpp: In member function `void Graph::set_Edge(std::string, std::string, int)':
Graph.cpp:30: error: 'class std::list<Graph::Edge, std::allocator<Graph::Edge> >' has no member named 'm_vertex'
makefile.txt:9: recipe for target `Graph.o' failed
make: *** [Graph.o] Error 1

here is the class declarations in the file Graph.h (sorry about all the comments, I like to keep all of my thoughts left on my code until i am ready to turn it in...) 这是Graph.h文件中的类声明(很抱歉,所有注释,我想将所有想法留在代码中,直到准备好将其打开为止)。

    #ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
//class MinPriority;
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
class Graph
{
public:
    Graph();
    ~Graph();
    /*void setArray(string vertex);
    void sortArray();
    Graph* getGraph(string preVertex, string vertex, int weight);
    void setGraph(string vertex, string postVertex, int weight);*/
    void set_Edge(string targetVertex, string vertex, int weight);
    friend class MinPriority;
private:
    class Edge
    {
    public:
        Edge(string vertex, int weight)
        {m_vertex = vertex; m_weight = weight;}
        ~Edge();
        string get_vertex(){}
        int get_weight(){}
    private:
        string m_vertex;
        int m_weight;
    };
    vector< list<Edge> > adjList;

};


#endif // GRAPH_H_INCLUDED

Here is Graph.cpp 这是Graph.cpp

#include "Graph.h"

void Graph::set_Edge(string targetVertex, string vertex, int weight) //find target vertex
{
    for(unsigned int u = 0; u <= adjList.size(); u++)//traverses through the Y coord of the 2D array
    {
        if(targetVertex == adjList[u].m_vertex) // <<THIS IS WHERE THE ERROR OCCURS!!!!
        {
            adjList[u].push_back(Edge(vertex, weight)); //push new element to the back of the linked list at array index u.
        }

    }
    //we now need to add
    //adjList[adjList.size()].push_back(Edge(vertex, weight));
}

Again, I basically need help finding out how to access parts of Edge (either vertex or weight) if(targetVertex == adjList[u].m_vertex) is what I hoped to use thinking it would find the 'u' index in the array and check the 'u' index's vertex element and compare it to target vertex. 再次,我基本上需要帮助找出如何访问Edge的各个部分(顶点或权重) if(targetVertex == adjList[u].m_vertex)是我希望使用的思想,它将在数组中找到'u'索引并检查“ u”索引的顶点元素并将其与目标顶点进行比较。

adjList is of type list<Edge> , so it doesn't have any members named m_vertex . adjList的类型为list<Edge> ,因此它没有任何名为m_vertex成员。 It's the nodes it contains that have m_vertex members. 它包含的节点具有m_vertex成员。

#include "Graph.h"

void Graph::set_Edge(string targetVertex, string vertex, int weight) 
{
    for(unsigned int u = 0; u <= adjList.size(); u++)
    {
        if(adjList[u].front().m_vertex == targetVertex)  
                   //^^add front() to access a list node 
                   //because the m_vertex member is same of all the edges in the list
                   //So just access the first one for simplicity.
        {
            adjList[u].push_back(Edge(vertex, weight)); 
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM