28 #ifndef MRPT_DIRECTEDGRAPH_H
29 #define MRPT_DIRECTEDGRAPH_H
61 template<
class TYPE_EDGES,
class EDGE_ANNOTATIONS = detail::edge_annotations_empty>
66 struct edge_t :
public TYPE_EDGES,
public EDGE_ANNOTATIONS
70 template <
typename ARG1>
inline edge_t (
const ARG1 &a1) : TYPE_EDGES(a1) { }
71 template <
typename ARG1,
typename ARG2>
inline edge_t (
const ARG1 &a1,
const ARG2 &a2) : TYPE_EDGES(a1,a2) { }
103 std::make_pair(from_nodeID,to_nodeID),
112 std::make_pair(from_nodeID,to_nodeID),
119 {
return edges.find(std::make_pair(from_nodeID,to_nodeID))!=
edges.end(); }
128 iterator it =
edges.find(std::make_pair(from_nodeID,to_nodeID));
131 else return it->second;
144 else return it->second;
149 return edges.equal_range( std::make_pair(from_nodeID,to_nodeID) );
153 return edges.equal_range( std::make_pair(from_nodeID,to_nodeID) );
159 edges.erase(std::make_pair(from_nodeID,to_nodeID));
169 lstNode_IDs.insert(it->first.first);
170 lstNode_IDs.insert(it->first.second);
181 std::set<TNodeID> aux;
184 aux.insert(it->first.first);
185 aux.insert(it->first.second);
196 if (it->first.first==nodeID)
197 neighborIDs.insert(it->first.second);
198 else if (it->first.second==nodeID)
199 neighborIDs.insert(it->first.first);
210 template <
class MAP_NODEID_SET_NODEIDS>
213 outAdjacency.clear();
216 outAdjacency[it->first.first].insert(it->first.second);
217 outAdjacency[it->first.second].insert(it->first.first);
223 template <
class MAP_NODEID_SET_NODEIDS,
class SET_NODEIDS>
224 void getAdjacencyMatrix( MAP_NODEID_SET_NODEIDS &outAdjacency,
const SET_NODEIDS &onlyForTheseNodes )
const
226 outAdjacency.clear();
230 if (onlyForTheseNodes.find(it->first.first)==setEnd || onlyForTheseNodes.find(it->first.second)==setEnd)
232 outAdjacency[it->first.first].insert(it->first.second);
233 outAdjacency[it->first.second].insert(it->first.first);