Dynamical system model
Loading...
Searching...
No Matches
dsf::Network< node_t, edge_t > Class Template Reference

Public Member Functions

 Network ()=default
 Construct a new empty Network object.
std::unordered_map< Id, std::unique_ptr< node_t > > const & nodes () const
 Get the nodes as an unordered map.
std::unordered_map< Id, std::unique_ptr< edge_t > > const & edges () const
 Get the edges as an unordered map.
size_t nNodes () const
 Get the number of nodes.
size_t nEdges () const
 Get the number of edges.
template<typename TNode = node_t, typename... TArgs>
void addNode (TArgs &&... args)
 Add a node to the network.
template<typename TNode = node_t>
void addNDefaultNodes (size_t n)
template<typename TEdge = edge_t, typename... TArgs>
void addEdge (TArgs &&... args)
 Add an edge to the network.
std::unique_ptr< node_t > const & node (Id nodeId) const
 Get a node by id.
std::unique_ptr< node_t > & node (Id nodeId)
 Get a node by id.
std::unique_ptr< edge_t > const & edge (Id edgeId) const
 Get an edge by id.
std::unique_ptr< edge_t > & edge (Id edgeId)
 Get an edge by id.
std::unique_ptr< edge_t > const & edge (Id source, Id target) const
template<typename TNode>
TNode & node (Id nodeId)
 Get a node by id.
template<typename TEdge>
TEdge & edge (Id edgeId)
 Get an edge by id.
template<typename WeightFunc>
void computeBetweennessCentralities (WeightFunc getEdgeWeight)
 Compute betweenness centralities for all nodes using Brandes' algorithm.
template<typename WeightFunc>
void computeEdgeBetweennessCentralities (WeightFunc getEdgeWeight)
 Compute edge betweenness centralities for all edges using Brandes' algorithm.

Protected Member Functions

Id m_cantorHash (Id u, Id v) const
Id m_cantorHash (std::pair< Id, Id > const &idPair) const

Protected Attributes

std::unordered_map< Id, std::unique_ptr< node_t > > m_nodes
std::unordered_map< Id, std::unique_ptr< edge_t > > m_edges

Member Function Documentation

◆ addEdge()

template<typename node_t, typename edge_t>
template<typename TEdge, typename... TArgs>
void dsf::Network< node_t, edge_t >::addEdge ( TArgs &&... args)

Add an edge to the network.

Template Parameters
TEdgeThe type of the edge (default is edge_t)
TArgsThe types of the arguments
Parameters
argsThe arguments to pass to the edge's constructor

◆ addNode()

template<typename node_t, typename edge_t>
template<typename TNode, typename... TArgs>
void dsf::Network< node_t, edge_t >::addNode ( TArgs &&... args)

Add a node to the network.

Template Parameters
TNodeThe type of the node (default is node_t)
TArgsThe types of the arguments
Parameters
argsThe arguments to pass to the node's constructor

◆ computeBetweennessCentralities()

template<typename node_t, typename edge_t>
template<typename WeightFunc>
void dsf::Network< node_t, edge_t >::computeBetweennessCentralities ( WeightFunc getEdgeWeight)

Compute betweenness centralities for all nodes using Brandes' algorithm.

Template Parameters
WeightFuncA callable type that takes a const reference to a unique_ptr<edge_t> and returns a double representing the edge weight
Parameters
getEdgeWeightA callable that takes a const reference to a unique_ptr<edge_t> and returns a double (must be positive)

Implements Brandes' algorithm for directed weighted graphs. The computed centrality for each node v is: C_B(v) = sum_{s != v != t} sigma_st(v) / sigma_st where sigma_st is the number of shortest paths from s to t, and sigma_st(v) is the number of those paths passing through v. Results are stored via Node::setBetweennessCentrality.

◆ computeEdgeBetweennessCentralities()

template<typename node_t, typename edge_t>
template<typename WeightFunc>
void dsf::Network< node_t, edge_t >::computeEdgeBetweennessCentralities ( WeightFunc getEdgeWeight)

Compute edge betweenness centralities for all edges using Brandes' algorithm.

Template Parameters
WeightFuncA callable type that takes a const reference to a unique_ptr<edge_t> and returns a double representing the edge weight
Parameters
getEdgeWeightA callable that takes a const reference to a unique_ptr<edge_t> and returns a double (must be positive)

Implements Brandes' algorithm for directed weighted graphs. The computed centrality for each edge e is: C_B(e) = sum_{s != t} sigma_st(e) / sigma_st where sigma_st is the number of shortest paths from s to t, and sigma_st(e) is the number of those paths using edge e. Results are stored via Edge::setBetweennessCentrality.

◆ edge() [1/3]

template<typename node_t, typename edge_t>
template<typename TEdge>
TEdge & dsf::Network< node_t, edge_t >::edge ( Id edgeId)

Get an edge by id.

Template Parameters
TEdgeThe type of the edge
Parameters
edgeIdThe edge's id
Returns
TEdge& A reference to the edge

◆ edge() [2/3]

template<typename node_t, typename edge_t>
std::unique_ptr< edge_t > & dsf::Network< node_t, edge_t >::edge ( Id edgeId)

Get an edge by id.

Parameters
edgeIdThe edge's id
Returns
std::unique_ptr<edge_t>& A reference to the edge

◆ edge() [3/3]

template<typename node_t, typename edge_t>
std::unique_ptr< edge_t > const & dsf::Network< node_t, edge_t >::edge ( Id edgeId) const

Get an edge by id.

Parameters
edgeIdThe edge's id
Returns
std::unique_ptr<edge_t> const& A const reference to the edge

◆ edges()

template<typename node_t, typename edge_t>
std::unordered_map< Id, std::unique_ptr< edge_t > > const & dsf::Network< node_t, edge_t >::edges ( ) const

Get the edges as an unordered map.

Returns
std::unordered_map<Id, std::unique_ptr<edge_t>> The edges

◆ nEdges()

template<typename node_t, typename edge_t>
size_t dsf::Network< node_t, edge_t >::nEdges ( ) const

Get the number of edges.

Returns
size_t The number of edges

◆ nNodes()

template<typename node_t, typename edge_t>
size_t dsf::Network< node_t, edge_t >::nNodes ( ) const

Get the number of nodes.

Returns
size_t The number of nodes

◆ node() [1/3]

template<typename node_t, typename edge_t>
template<typename TNode>
TNode & dsf::Network< node_t, edge_t >::node ( Id nodeId)

Get a node by id.

Template Parameters
TNodeThe type of the node
Parameters
nodeIdThe node's id
Returns
TNode& A reference to the node

◆ node() [2/3]

template<typename node_t, typename edge_t>
std::unique_ptr< node_t > & dsf::Network< node_t, edge_t >::node ( Id nodeId)

Get a node by id.

Parameters
nodeIdThe node's id
Returns
std::unique_ptr<node_t>& A reference to the node

◆ node() [3/3]

template<typename node_t, typename edge_t>
std::unique_ptr< node_t > const & dsf::Network< node_t, edge_t >::node ( Id nodeId) const

Get a node by id.

Parameters
nodeIdThe node's id
Returns
std::unique_ptr<node_t> const& A const reference to the node

◆ nodes()

template<typename node_t, typename edge_t>
std::unordered_map< Id, std::unique_ptr< node_t > > const & dsf::Network< node_t, edge_t >::nodes ( ) const

Get the nodes as an unordered map.

Returns
std::unordered_map<Id, std::unique_ptr<node_t>> The nodes

The documentation for this class was generated from the following file:
  • src/dsf/base/Network.hpp