Template Class CDirectedGraph

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

insertEdgeAtEnd

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

insertEdge

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

getEdges

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

getEdge

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

getEdge

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.

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.

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:

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 iterator begin()
inline iterator rbegin()
inline iterator end()
inline iterator rend()
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 Functions

inline edge_t()
template<typename ...Args>
inline edge_t(Args&&... a)

Public Static Functions

static inline constexpr auto getClassName()