Pruebe vector<NodeType>
con multimap< NodeType *, EdgeType>
.
multimap
no es compatible con la suscripción [ x ]
por lo que tendrá que utilizar edges.lower_bound()
en su lugar.
Como alternativa, un map< pair< NodeType *, NodeType * >, EdgeType >
puede ayudar a buscar un borde dado dos nodos. Usé exactamente eso en un programa bastante resistente.
He aquí un ejemplo de la primera sugerencia:
struct NodeType {
int distance;
NodeType(int d) { distance = d; }
};
struct EdgeType {
int weight;
NodeType *link;
EdgeType(int w, NodeType *l) { weight = w; link = l }
};
vector<NodeType> nodes;
nodes.reserve(3);
nodes.push_back(NodeType(0));
nodes.push_back(NodeType(0));
nodes.push_back(NodeType(0));
multimap< NodeType *, EdgeType > edges;
edges.insert(make_pair(&nodes[0], EdgeType(4, &nodes[2])));
edges.insert(make_pair(&nodes[0], EdgeType(1, &nodes[1])));
edges.insert(make_pair(&nodes[2], EdgeType(2, &nodes[0])));
for (multimap< NodeType *, EdgeType >::iterator iter = edges.lower_bound(&nodes[1]),
end = edges.upper_bound(&nodes[1]); iter != end; ++ iter) {
cerr << "1 connects to " << iter->second.link - nodes.begin() << endl;
}
digraph es la nomenclatura de la teoría de grafos estándar. –
@Neil: vea http://en.wiktionary.org/wiki/digraph –
@Greg Vea http://en.wikipedia.org/wiki/Digraphs_and_trigraphs - pero borraré mi comentario. –