![]() |
aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
|
Base class for undirected graphs. More...
#include <undiGraph.h>
Public Attributes | |
Signaler1< NodeId > | onNodeAdded |
Signaler1< NodeId > | onNodeDeleted |
Signaler2< NodeId, NodeId > | onEdgeAdded |
Signaler2< NodeId, NodeId > | onEdgeDeleted |
Public Member Functions | |
Constructors / Destructors | |
UndiGraph (Size nodes_size=HashTableConst::default_size, bool nodes_resize_policy=true, Size edges_size=HashTableConst::default_size, bool edges_resize_policy=true) | |
default constructor More... | |
UndiGraph (const UndiGraph &g) | |
copy constructor More... | |
virtual | ~UndiGraph () |
destructor More... | |
Operators | |
UndiGraph & | operator= (const UndiGraph &g) |
copy operator More... | |
bool | operator== (const UndiGraph &g) const |
tests whether two UndiGraphs are identical (same nodes, same edges) More... | |
bool | operator!= (const UndiGraph &g) const |
tests whether two UndiGraphs are different More... | |
Accessors/Modifiers | |
void | addEdge (NodeId first, NodeId second) override |
insert a new edge into the undirected graph More... | |
void | eraseNode (NodeId id) override |
remove a node and its adjacent edges from the graph More... | |
void | clear () override |
removes all the nodes and edges from the graph More... | |
std::string | toString () const override |
to friendly display the content of the graph More... | |
virtual std::string | toDot () const |
to friendly display graph in DOT format More... | |
bool | hasUndirectedCycle () const |
checks whether the graph contains cycles More... | |
virtual UndiGraph | partialUndiGraph (NodeSet nodes) |
returns the partial graph formed by the nodes given in parameter More... | |
NodeProperty< NodeId > | nodes2ConnectedComponent () const |
returns a property {node:id of connected component} More... | |
Operators | |
bool | operator== (const NodeGraphPart &p) const |
check whether two NodeGraphParts contain the same nodes More... | |
bool | operator!= (const NodeGraphPart &p) const |
check whether two NodeGraphParts contain different nodes More... | |
Accessors/Modifiers | |
void | populateNodes (const NodeGraphPart &s) |
populateNodes clears *this and fills it with the same nodes as "s" More... | |
template<typename T > | |
void | populateNodesFromProperty (const NodeProperty< T > &h) |
populateNodesFromProperty clears *this and fills it with the keys of "h" More... | |
NodeId | nextNodeId () const |
returns a new node id, not yet used by any node More... | |
virtual NodeId | addNode () |
insert a new node and return its id More... | |
std::vector< NodeId > | addNodes (Size n) |
insert n nodes More... | |
virtual void | addNodeWithId (const NodeId id) |
try to insert a node with the given id More... | |
bool | existsNode (const NodeId id) const |
returns true iff the NodeGraphPart contains the given nodeId More... | |
bool | exists (const NodeId id) const |
alias for existsNode More... | |
bool | emptyNodes () const |
indicates whether there exists nodes in the NodeGraphPart More... | |
bool | empty () const |
alias for emptyNodes More... | |
virtual void | clearNodes () |
remove all the nodes from the NodeGraphPart More... | |
Size | sizeNodes () const |
returns the number of nodes in the NodeGraphPart More... | |
Size | size () const |
alias for sizeNodes More... | |
NodeId | bound () const |
returns a number n such that all node ids are strictly lower than n More... | |
NodeSet | asNodeSet () const |
returns a copy of the set of nodes represented by the NodeGraphPart More... | |
const NodeGraphPart & | nodes () const |
return *this as a NodeGraphPart More... | |
node_iterator_safe | beginSafe () const |
a begin iterator to parse the set of nodes contained in the NodeGraphPart More... | |
const node_iterator_safe & | endSafe () const noexcept |
the end iterator to parse the set of nodes contained in the NodeGraphPart More... | |
node_iterator | begin () const noexcept |
a begin iterator to parse the set of nodes contained in the NodeGraphPart More... | |
const node_iterator & | end () const noexcept |
the end iterator to parse the set of nodes contained in the NodeGraphPart More... | |
template<typename VAL > | |
NodeProperty< VAL > | nodesProperty (VAL(*f)(const NodeId &), Size size=0) const |
a method to create a HashTable with key:NodeId and value:VAL More... | |
template<typename VAL > | |
NodeProperty< VAL > | nodesProperty (const VAL &a, Size size=0) const |
a method to create a hashMap with key:NodeId and value:VAL More... | |
template<typename VAL > | |
List< VAL > | listMapNodes (VAL(*f)(const NodeId &)) const |
a method to create a list of VAL from a set of nodes (using for every nodee, say x, the VAL f(x)) More... | |
Operators | |
bool | operator== (const EdgeGraphPart &p) const |
tests whether two EdgeGraphParts contain the same edges More... | |
bool | operator!= (const EdgeGraphPart &p) const |
tests whether two EdgeGraphParts contain different edges More... | |
Accessors/Modifiers | |
virtual void | eraseEdge (const Edge &edge) |
removes an edge from the EdgeGraphPart More... | |
bool | existsEdge (const Edge &edge) const |
indicates whether a given edge exists More... | |
bool | existsEdge (const NodeId n1, const NodeId n2) const |
indicates whether a given edge exists More... | |
bool | emptyEdges () const |
indicates wether the EdgeGraphPart contains any edge More... | |
virtual void | clearEdges () |
removes all the edges from the EdgeGraphPart More... | |
Size | sizeEdges () const |
indicates the number of edges stored within the EdgeGraphPart More... | |
const EdgeSet & | edges () const |
returns the set of edges stored within the EdgeGraphPart More... | |
const NodeSet & | neighbours (const NodeId id) const |
returns the set of node neighbours to a given node More... | |
void | eraseNeighbours (const NodeId id) |
erase all the edges adjacent to a given node More... | |
void | unvirtualizedEraseNeighbours (const NodeId id) |
same function as eraseNeighbours but without any virtual call to an erase More... | |
template<typename VAL > | |
EdgeProperty< VAL > | edgesProperty (VAL(*f)(const Edge &), Size size=0) const |
a method to create a hashMap of VAL from a set of edges (using for every edge, say x, the VAL f(x)) More... | |
template<typename VAL > | |
EdgeProperty< VAL > | edgesProperty (const VAL &a, Size size=0) const |
a method to create a hashMap of VAL from a set of edges (using for every edge, say x, the VAL a) More... | |
template<typename VAL > | |
List< VAL > | listMapEdges (VAL(*f)(const Edge &)) const |
a method to create a list of VAL from a set of edges (using for every edge, say x, the VAL f(x)) More... | |
const std::vector< NodeId > | undirectedPath (const NodeId node1, const NodeId node2) const |
returns a possible path from node1 to node2 in the edge set More... | |
bool | hasUndirectedPath (const NodeId n1, const NodeId n2) const |
return true if n1 and n2 are connected (by an undirected path) in the graph. More... | |
bool | hasUndirectedPath (const NodeId n1, const NodeId n2, const NodeSet &except) const |
return true if n1 and n2 are connected (by an undirected path not using the nodes of except) in the graph. More... | |
bool | hasUndirectedPath (const NodeSet &n1, const NodeSet &n2, const NodeSet &except) const |
return true if n1 and n2 are connected (by an undirected path not using the nodes of except) in the graph. More... | |
Public Types | |
typedef NodeGraphPartIterator | NodeIterator |
typedef NodeGraphPartIterator | NodeConstIterator |
typedef NodeGraphPartIteratorSafe | NodeIteratorSafe |
typedef NodeGraphPartIteratorSafe | NodeConstIteratorSafe |
typedef EdgeSetIterator | EdgeIterator |
using | node_iterator = NodeGraphPartIterator |
types for STL compliance More... | |
using | node_const_iterator = NodeGraphPartIterator |
types for STL compliance More... | |
using | node_iterator_safe = NodeGraphPartIteratorSafe |
types for STL compliance More... | |
using | node_const_iterator_safe = NodeGraphPartIteratorSafe |
types for STL compliance More... | |
Base class for undirected graphs.
This is the base class for graphs containing undirected edges (so-called edges).
Definition at line 108 of file undiGraph.h.
|
inherited |
Definition at line 76 of file edgeGraphPart.h.
|
inherited |
types for STL compliance
Definition at line 258 of file nodeGraphPart.h.
|
inherited |
types for STL compliance
Definition at line 260 of file nodeGraphPart.h.
|
inherited |
types for STL compliance
Definition at line 257 of file nodeGraphPart.h.
|
inherited |
types for STL compliance
Definition at line 259 of file nodeGraphPart.h.
|
inherited |
Definition at line 267 of file nodeGraphPart.h.
|
inherited |
Definition at line 269 of file nodeGraphPart.h.
|
inherited |
Definition at line 266 of file nodeGraphPart.h.
|
inherited |
Definition at line 268 of file nodeGraphPart.h.
|
explicit |
default constructor
nodes_size | the size of the hash table used to store all the nodes |
nodes_resize_policy | the resizing policy of this hash table |
edges_size | the size of the hash table used to store all the edges |
edges_resize_policy | the resizing policy of this hash table |
Definition at line 39 of file undiGraph.cpp.
gum::UndiGraph::UndiGraph | ( | const UndiGraph & | g | ) |
copy constructor
g | the UndiGraph to copy |
Definition at line 48 of file undiGraph.cpp.
|
virtual |
destructor
Definition at line 52 of file undiGraph.cpp.
insert a new edge into the undirected graph
The order in which the extremal nodes are specified is not important.
first | the id of one extremal node of the new inserted edge |
second | the id of the other extremal node of the new inserted edge |
InvalidNode | if first and/or second do not belong to the graph nodes |
Reimplemented from gum::EdgeGraphPart.
Definition at line 34 of file undiGraph_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
insert a new node and return its id
Reimplemented in gum::CliqueGraph.
Definition at line 238 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
insert n nodes
n | the number of nodes to add |
Definition at line 256 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
try to insert a node with the given id
DuplicateElement | exception if the id already exists |
Definition at line 131 of file nodeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
returns a copy of the set of nodes represented by the NodeGraphPart
Definition at line 340 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
noexceptinherited |
a begin iterator to parse the set of nodes contained in the NodeGraphPart
Definition at line 314 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
a begin iterator to parse the set of nodes contained in the NodeGraphPart
Definition at line 302 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
returns a number n such that all node ids are strictly lower than n
Definition at line 291 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
overridevirtual |
removes all the nodes and edges from the graph
Reimplemented from gum::NodeGraphPart.
Definition at line 42 of file undiGraph_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
removes all the edges from the EdgeGraphPart
Reimplemented in gum::CliqueGraph.
Definition at line 66 of file edgeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
remove all the nodes from the NodeGraphPart
Definition at line 293 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
returns the set of edges stored within the EdgeGraphPart
Definition at line 38 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
a method to create a hashMap of VAL from a set of edges (using for every edge, say x, the VAL f(x))
f | a function assigning a VAL to any edge |
size | an optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of edges. If you do not specify this parameter, the method will assign it for you. |
|
inherited |
a method to create a hashMap of VAL from a set of edges (using for every edge, say x, the VAL a)
a | the default value assigned to each edge in the returned Property |
size | an optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of edges. If you do not specify this parameter, the method will assign it for you. |
|
inherited |
alias for emptyNodes
Definition at line 289 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
indicates wether the EdgeGraphPart contains any edge
Definition at line 34 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
indicates whether there exists nodes in the NodeGraphPart
Definition at line 287 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
noexceptinherited |
the end iterator to parse the set of nodes contained in the NodeGraphPart
Definition at line 320 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
noexceptinherited |
the end iterator to parse the set of nodes contained in the NodeGraphPart
Definition at line 310 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
removes an edge from the EdgeGraphPart
edge | the edge to be removed |
Reimplemented in gum::CliqueGraph.
Definition at line 61 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
erase all the edges adjacent to a given node
id | the node the adjacent edges of which will be removed |
Definition at line 79 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
overridevirtual |
remove a node and its adjacent edges from the graph
id | the id of the node to be removed |
Reimplemented from gum::NodeGraphPart.
Definition at line 57 of file undiGraph_inl.h.
References gum::Set< Key, Alloc >::emplace().
alias for existsNode
Definition at line 277 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
indicates whether a given edge exists
edge | the edge we test whether or not it belongs to the EdgeGraphPart |
Definition at line 40 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
indicates whether a given edge exists
n1 | the id of one extremity of the edge we test the existence in the EdgeGraphPart |
n2 | the id of the other extremity of the edge we test the existence in the EdgeGraphPart |
Definition at line 42 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
returns true iff the NodeGraphPart contains the given nodeId
Definition at line 271 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
bool gum::UndiGraph::hasUndirectedCycle | ( | ) | const |
checks whether the graph contains cycles
Definition at line 57 of file undiGraph.cpp.
return true if n1 and n2 are connected (by an undirected path) in the graph.
n1 | NodeId |
n2 | NodeId |
Definition at line 166 of file edgeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
return true if n1 and n2 are connected (by an undirected path not using the nodes of except) in the graph.
n1 | NodeId |
n2 | NodeId |
except | NodeSet |
Definition at line 183 of file edgeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
return true if n1 and n2 are connected (by an undirected path not using the nodes of except) in the graph.
n1 | NodeSet |
n2 | NodeSet |
except | NodeSet |
Definition at line 203 of file edgeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
a method to create a list of VAL from a set of edges (using for every edge, say x, the VAL f(x))
f | a function assigning a VAL to any edge |
|
inherited |
a method to create a list of VAL from a set of nodes (using for every nodee, say x, the VAL f(x))
f | a function assigning a VAL to any node |
returns the set of node neighbours to a given node
Note that the set of nodes returned may be empty if no edge within the EdgeGraphPart is adjacent the given node.
id | the node to which the edges are adjacent |
Definition at line 74 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
returns a new node id, not yet used by any node
Definition at line 211 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
return *this as a NodeGraphPart
Definition at line 352 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
NodeProperty< NodeId > gum::UndiGraph::nodes2ConnectedComponent | ( | ) | const |
returns a property {node:id of connected component}
Definition at line 152 of file undiGraph.cpp.
|
inherited |
a method to create a HashTable with key:NodeId and value:VAL
VAL are computed from the nodes using for all node x, VAL f(x). This method is a wrapper of the same method in HashTable.
f | a function assigning a VAL to any node |
size | an optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of nodes. If you do not specify this parameter, the method will assign it for you. |
|
inherited |
a method to create a hashMap with key:NodeId and value:VAL
for all nodes, the value stored is a. This method is a wrapper of the same method in HashTable.
a | the default value assigned to each edge in the returned Property |
size | an optional parameter enabling to fine-tune the returned Property. Roughly speaking, it is a good practice to have a size equal to half the number of nodes. If you do not specify this parameter, the method will assign it for you. |
|
inherited |
tests whether two EdgeGraphParts contain different edges
p | the EdgeGraphPart that we compare with this |
Definition at line 107 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
tests whether two UndiGraphs are different
g | the UndiGraph with which "this" is compared |
Definition at line 69 of file undiGraph_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
check whether two NodeGraphParts contain different nodes
p | the NodeGraphPart to be compared with "this" |
Definition at line 338 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
copy operator
g | the DiGraph to copy |
Definition at line 47 of file undiGraph_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
tests whether two EdgeGraphParts contain the same edges
p | the EdgeGraphPart that we compare with this |
Definition at line 103 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
tests whether two UndiGraphs are identical (same nodes, same edges)
g | the UndiGraph with which "this" is compared |
Definition at line 65 of file undiGraph_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
check whether two NodeGraphParts contain the same nodes
p | the NodeGraphPart to be compared with "this" |
Definition at line 324 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
returns the partial graph formed by the nodes given in parameter
Definition at line 139 of file undiGraph.cpp.
|
inherited |
populateNodes clears *this and fills it with the same nodes as "s"
populateNodes should basically be the preferred way to insert nodes with IDs not selected by the internal idFactory.
s | the NodeGraphPart to be copied |
Definition at line 63 of file nodeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
populateNodesFromProperty clears *this and fills it with the keys of "h"
populateNodes should basically be the preferred way to insert nodes with IDs not selected by the internal idFactory.
|
inherited |
alias for sizeNodes
Definition at line 269 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
indicates the number of edges stored within the EdgeGraphPart
Definition at line 36 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
returns the number of nodes in the NodeGraphPart
Definition at line 265 of file nodeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtual |
to friendly display graph in DOT format
Reimplemented in gum::CliqueGraph, and gum::MixedGraph.
Definition at line 111 of file undiGraph.cpp.
|
overridevirtual |
to friendly display the content of the graph
Reimplemented from gum::NodeGraphPart.
Definition at line 104 of file undiGraph.cpp.
|
inherited |
returns a possible path from node1 to node2 in the edge set
node1 | the id from which the path begins |
node2 | the id to which the path ends |
NotFound | exception is raised if no path can be found between the two nodes |
Definition at line 125 of file edgeGraphPart.cpp.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
same function as eraseNeighbours but without any virtual call to an erase
id | the node whose ingoing arcs will be removed |
Definition at line 92 of file edgeGraphPart_inl.h.
References gum::Set< Key, Alloc >::emplace().
Definition at line 78 of file edgeGraphPart.h.
Definition at line 79 of file edgeGraphPart.h.
|
inherited |
Definition at line 271 of file nodeGraphPart.h.
|
inherited |
Definition at line 272 of file nodeGraphPart.h.