Try vector< NodeType > with multimap< NodeType *, EdgeType> .
multimap does not support indexing [ x ] , so you will need to use edges.lower_bound() .
Alternatively, map< pair< NodeType *, NodeType * >, EdgeType > can help find the edge given by two nodes. I used exactly this in one rather heavy program.
Here is an example of the first sentence:
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; }
Potatoswatter
source share