Я пытаюсь получить доступ к edge_ внутри моего Node Struct, поэтому я могу сделать for-loop, чтобы скопировать ребра на новый объект графа для моего конструктора копий.Конструктор глубоких копий для нового графа
Я получаю следующую ошибку, которая меня смущает, когда я пытаюсь получить доступ к краям в узле.
tests/Graph.tem:280:24: error: ‘struct std::pair<const std::__cxx11::basic_string<char>, std::shared_ptr<gdwg::Graph<std::__cxx11::basic_string<char>, int>::Node> >’ has no member named ‘edges_’
for (auto edge: node.edges_) {
~~~~~^~~~~~
Я пытаюсь сделать конструктор копирования, который копирует глубокие узлы и ребра внутри графа над новым объектом графа:
template <typename N, typename E>
Graph<N, E>::Graph(const Graph &g):
nodes_{g.nodes_}
{
for (auto node: g.nodes_) {
for (auto edge: node.edges_) {
}
}
}
Ниже мой график класс:
template <typename N, typename E> class Graph {
private:
struct Node;
struct Edge;
struct Node {
N val_;
int numEdges_;
int numIncomingEdges_;
std::set<std::shared_ptr<Edge>> edges_;
std::set<std::shared_ptr<Edge>> incomingEdges_;
Node() {}
Node(const N x) : val_{x} { numEdges_=0; numIncomingEdges_=0; }
void printNode(N n);
~Node();
void update();
};
struct Edge {
std::weak_ptr<Node> orig;
std::weak_ptr<Node> dest;
E val_;
Edge(std::shared_ptr<Node> o, std::shared_ptr<Node> d, E x);
Edge() {};
void printEdge();
~Edge();
};
Во-первых, как мне получить к нему доступ к глубокой копии? Кажется, есть проблема с ptr. Во-вторых, есть ли простой способ глубоко скопировать края, хранящиеся внутри узла?
Каков тип 'Graph :: nodes_'? Если это 'std :: map>', как указывает ваше сообщение об ошибке, 'node' имеет тип' std :: pair > ', поэтому вместо' node.edges_' вы должны использовать 'node.second-> edge_'. –
Franck
std :: map> nodes_; –
iteong
поэтому для первой проблемы вы должны заменить 'for (auto edge: node.edges_)' by 'for (auto edge: node.second-> edge_)'. – Franck