Template Class CDirectedGraph
Defined in File CDirectedGraph.h
Nested Relationships
Nested Types
Class Documentation
-
template<class TYPE_EDGES, class EDGE_ANNOTATIONS = detail::edge_annotations_empty>
class CDirectedGraph A directed graph with the argument of the template specifying the type of the annotations in the edges. This class only keeps a list of edges (in the member edges), so there is no information stored for each node but its existence referred by a node_ID.
Note that edges are stored as a std::multimap<> to allow multiple edges between the same pair of nodes.
Edges/nodes utility methods
-
inline size_t edgeCount() const
The number of edges in the graph
-
inline void clearEdges()
Erase all edges
-
inline void insertEdge(TNodeID from_nodeID, TNodeID to_nodeID, const edge_t &edge_value)
Insert an edge (from -> to) with the given edge value.
See also
-
inline void insertEdgeAtEnd(TNodeID from_nodeID, TNodeID to_nodeID, const edge_t &edge_value)
Insert an edge (from -> to) with the given edge value (more efficient version to be called if you know that the end will go at the end of the sorted std::multimap).
See also
-
inline bool edgeExists(TNodeID from_nodeID, TNodeID to_nodeID) const
Test if the given directed edge exists.
-
inline edge_t &getEdge(TNodeID from_nodeID, TNodeID to_nodeID)
Return a reference to the content of a given edge. If several edges exist between the given nodes, the first one is returned.
See also
- Throws:
std::exception – if the given edge does not exist
-
inline std::pair<iterator, iterator> getEdges(TNodeID from_nodeID, TNodeID to_nodeID)
Return a pair<first,last> of iterators to the range of edges between two given nodes.
See also
-
inline std::pair<const_iterator, const_iterator> getEdges(TNodeID from_nodeID, TNodeID to_nodeID) const
Return a pair<first,last> of const iterators to the range of edges between two given nodes.
See also
-
inline void eraseEdge(TNodeID from_nodeID, TNodeID to_nodeID)
Erase all edges between the given nodes (it has no effect if no edge existed)
-
inline void getAllNodes(std::set<TNodeID> &lstNode_IDs) const
Return a list of all the node_ID’s of the graph, generated from all the nodes that appear in the list of edges
-
inline std::set<TNodeID> getAllNodes() const
Less efficient way to get all nodes that returns a copy of the set object
See also
getAllNodes( std::set<TNodeID> &lstNode_IDs)
-
inline size_t countDifferentNodesInEdges() const
Count how many different node IDs appear in the graph edges.
-
inline void getNeighborsOf(TNodeID const nodeID, std::set<TNodeID> &neighborIDs) const
Return the list of all neighbors of “nodeID”, by creating a list of their node IDs.
See also
-
inline std::set<TNodeID> getNeighborsOf(TNodeID const nodeID) const
Return the list of all neighbors of “nodeID”, by creating a list of their node IDs.
See also
-
template<class MAP_NODEID_SET_NODEIDS>
inline void getAdjacencyMatrix(MAP_NODEID_SET_NODEIDS &outAdjacency) const Return a map from node IDs to all its neighbors (that is, connected nodes, regardless of the edge direction) This is a much more efficient method than calling getNeighborsOf() for each node in the graph. Possible values for the template argument MAP_NODEID_SET_NODEIDS are:
std::map<TNodeID, std::set<TNodeID> >
mrpt::containers::map_as_vector<TNodeID, std::set<TNodeID> >
See also
-
template<class MAP_NODEID_SET_NODEIDS, class SET_NODEIDS>
inline void getAdjacencyMatrix(MAP_NODEID_SET_NODEIDS &outAdjacency, const SET_NODEIDS &onlyForTheseNodes) const Just like getAdjacencyMatrix but return only the adjacency for those node_ids in the set onlyForTheseNodes (both endings nodes of an edge must be within the set for it to be returned)
I/O utilities
-
inline bool saveAsDot(std::ostream &o, const TGraphvizExportParams &p = TGraphvizExportParams()) const
Save the graph in a Graphviz (.dot files) text format; useful for quickly rendering the graph with “dot”
- Returns:
false on any error
-
inline bool saveAsDot(const std::string &fileName, const TGraphvizExportParams &p = TGraphvizExportParams()) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Public Types
-
using edge_underlying_t = TYPE_EDGES
Underlying type for edge_t = TYPE_EDGES + annotations
-
using edges_map_t = std::multimap<TPairNodeIDs, edge_t>
The type of the member edges
-
using iterator = typename edges_map_t::iterator
-
using reverse_iterator = typename edges_map_t::reverse_iterator
-
using const_iterator = typename edges_map_t::const_iterator
-
using const_reverse_iterator = typename edges_map_t::const_reverse_iterator
-
using self_t = CDirectedGraph<TYPE_EDGES, EDGE_ANNOTATIONS>
Handy self type.
Public Functions
-
inline CDirectedGraph(const edges_map_t &obj)
Copy constructor from a multimap<pair< >, >
-
inline CDirectedGraph()
Default constructor
-
inline const_iterator begin() const
-
inline const_iterator rbegin() const
-
inline const_iterator end() const
-
inline const_iterator rend() const
Public Members
-
edges_map_t edges
The public member with the directed edges in the graph
-
struct edge_t : public TYPE_EDGES, public EDGE_ANNOTATIONS
The type of each global pose in nodes: an extension of the TYPE_EDGES pose with any optional user-defined data
Public Static Functions
-
static inline constexpr auto getClassName()
-
static inline constexpr auto getClassName()
-
inline size_t edgeCount() const