StaticDigraph is a highly efficient digraph implementation, but it is fully static. It stores only two int
values for each node and only four int
values for each arc. Moreover it provides faster item iteration than ListDigraph and SmartDigraph, especially using OutArcIt
iterators, since its arcs are stored in an appropriate order. However it only provides build() and clear() functions and does not support any other modification of the digraph.
Since this digraph structure is completely static, its nodes and arcs can be indexed with integers from the ranges [0..nodeNum()-1]
and [0..arcNum()-1]
, respectively. The index of an item is the same as its ID, it can be obtained using the corresponding index() or id() function. A node or arc with a certain index can be obtained using node() or arc().
This type fully conforms to the Digraph concept. Most of its member functions and nested classes are documented only in the concept class.
This class provides constant time counting for nodes and arcs.
- See Also
- concepts::Digraph
Inherits DigraphExtender< Base >.
void build |
( |
int |
n, |
|
|
ArcListIterator |
begin, |
|
|
ArcListIterator |
end |
|
) |
| |
|
inline |
This function builds the digraph from the given arc list. It can be called more than once, but in such case, the whole structure and all maps will be cleared and rebuilt.
The list of the arcs must be given in the range [begin, end)
specified by STL compatible itartors whose value_type
must be std::pair<int,int>
. Each arc must be specified by a pair of integer indices from the range [0..n-1]
. The pairs must be in a non-decreasing order with respect to their first values. If the k-th pair in the list is (i,j)
, then arc(k-1)
will connect node(i)
to node(j)
.
- Parameters
-
n | The number of nodes. |
begin | An iterator pointing to the beginning of the arc list. |
end | An iterator pointing to the end of the arc list. |
For example, a simple digraph can be constructed like this.
* std::vector<std::pair<int,int> > arcs;
* arcs.push_back(std::make_pair(0,1));
* arcs.push_back(std::make_pair(0,2));
* arcs.push_back(std::make_pair(1,3));
* arcs.push_back(std::make_pair(1,2));
* arcs.push_back(std::make_pair(3,0));
* gr.build(4, arcs.begin(), arcs.end());
*