pub type UnGraphMap<N, E> = GraphMap<N, E, Undirected>;
Expand description
A GraphMap
with undirected edges.
For example, an edge between 1 and 2 is equivalent to an edge between 2 and 1.
Aliased Type§
struct UnGraphMap<N, E> {
nodes: OrderMap<N, Vec<(N, CompactDirection)>>,
edges: OrderMap<(N, N), E>,
ty: PhantomData<Undirected>,
}
Fields§
§nodes: OrderMap<N, Vec<(N, CompactDirection)>>
§edges: OrderMap<(N, N), E>
§ty: PhantomData<Undirected>
Implementations
Source§impl<N, E, Ty> GraphMap<N, E, Ty>
impl<N, E, Ty> GraphMap<N, E, Ty>
Sourcepub fn with_capacity(nodes: usize, edges: usize) -> Self
pub fn with_capacity(nodes: usize, edges: usize) -> Self
Create a new GraphMap
with estimated capacity.
Sourcepub fn capacity(&self) -> (usize, usize)
pub fn capacity(&self) -> (usize, usize)
Return the current node and edge capacity of the graph.
Sourcefn edge_key(a: N, b: N) -> (N, N)
fn edge_key(a: N, b: N) -> (N, N)
Use their natual order to map the node pair (a, b) to a canonical edge id.
Sourcepub fn is_directed(&self) -> bool
pub fn is_directed(&self) -> bool
Whether the graph has directed edges.
Sourcepub fn from_edges<I>(iterable: I) -> Self
pub fn from_edges<I>(iterable: I) -> Self
Create a new GraphMap
from an iterable of edges.
Node values are taken directly from the list.
Edge weights E
may either be specified in the list,
or they are filled with default values.
Nodes are inserted automatically to match the edges.
use petgraph::graphmap::UnGraphMap;
// Create a new undirected GraphMap.
// Use a type hint to have `()` be the edge weight type.
let gr = UnGraphMap::<_, ()>::from_edges(&[
(0, 1), (0, 2), (0, 3),
(1, 2), (1, 3),
(2, 3),
]);
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Return the number of nodes in the graph.
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
Return the number of edges in the graph.
Sourcepub fn remove_node(&mut self, n: N) -> bool
pub fn remove_node(&mut self, n: N) -> bool
Return true
if node n
was removed.
Sourcepub fn contains_node(&self, n: N) -> bool
pub fn contains_node(&self, n: N) -> bool
Return true
if the node is contained in the graph.
Sourcepub fn add_edge(&mut self, a: N, b: N, weight: E) -> Option<E>
pub fn add_edge(&mut self, a: N, b: N, weight: E) -> Option<E>
Add an edge connecting a
and b
to the graph, with associated
data weight
. For a directed graph, the edge is directed from a
to b
.
Inserts nodes a
and/or b
if they aren’t already part of the graph.
Return None
if the edge did not previously exist, otherwise,
the associated data is updated and the old value is returned
as Some(old_weight)
.
// Create a GraphMap with directed edges, and add one edge to it
use petgraph::graphmap::DiGraphMap;
let mut g = DiGraphMap::new();
g.add_edge("x", "y", -1);
assert_eq!(g.node_count(), 2);
assert_eq!(g.edge_count(), 1);
assert!(g.contains_edge("x", "y"));
assert!(!g.contains_edge("y", "x"));
Sourcefn remove_single_edge(&mut self, a: &N, b: &N, dir: Direction) -> bool
fn remove_single_edge(&mut self, a: &N, b: &N, dir: Direction) -> bool
Remove edge relation from a to b
Return true
if it did exist.
Sourcepub fn remove_edge(&mut self, a: N, b: N) -> Option<E>
pub fn remove_edge(&mut self, a: N, b: N) -> Option<E>
Remove edge from a
to b
from the graph and return the edge weight.
Return None
if the edge didn’t exist.
// Create a GraphMap with undirected edges, and add and remove an edge.
use petgraph::graphmap::UnGraphMap;
let mut g = UnGraphMap::new();
g.add_edge("x", "y", -1);
let edge_data = g.remove_edge("y", "x");
assert_eq!(edge_data, Some(-1));
assert_eq!(g.edge_count(), 0);
Sourcepub fn contains_edge(&self, a: N, b: N) -> bool
pub fn contains_edge(&self, a: N, b: N) -> bool
Return true
if the edge connecting a
with b
is contained in the graph.
Sourcepub fn nodes(&self) -> Nodes<'_, N> ⓘ
pub fn nodes(&self) -> Nodes<'_, N> ⓘ
Return an iterator over the nodes of the graph.
Iterator element type is N
.
Sourcepub fn neighbors(&self, a: N) -> Neighbors<'_, N, Ty> ⓘ
pub fn neighbors(&self, a: N) -> Neighbors<'_, N, Ty> ⓘ
Return an iterator of all nodes with an edge starting from a
.
Directed
: Outgoing edges froma
.Undirected
: All edges from or toa
.
Produces an empty iterator if the node doesn’t exist.
Iterator element type is N
.
Sourcepub fn neighbors_directed(
&self,
a: N,
dir: Direction,
) -> NeighborsDirected<'_, N, Ty> ⓘ
pub fn neighbors_directed( &self, a: N, dir: Direction, ) -> NeighborsDirected<'_, N, Ty> ⓘ
Return an iterator of all neighbors that have an edge between them and
a
, in the specified direction.
If the graph’s edges are undirected, this is equivalent to .neighbors(a).
Directed
,Outgoing
: All edges froma
.Directed
,Incoming
: All edges toa
.Undirected
: All edges from or toa
.
Produces an empty iterator if the node doesn’t exist.
Iterator element type is N
.
Sourcepub fn edges(&self, from: N) -> Edges<'_, N, E, Ty> ⓘ
pub fn edges(&self, from: N) -> Edges<'_, N, E, Ty> ⓘ
Return an iterator of target nodes with an edge starting from a
,
paired with their respective edge weights.
Directed
: Outgoing edges froma
.Undirected
: All edges from or toa
.
Produces an empty iterator if the node doesn’t exist.
Iterator element type is (N, &E)
.
Sourcepub fn edge_weight(&self, a: N, b: N) -> Option<&E>
pub fn edge_weight(&self, a: N, b: N) -> Option<&E>
Return a reference to the edge weight connecting a
with b
, or
None
if the edge does not exist in the graph.
Sourcepub fn edge_weight_mut(&mut self, a: N, b: N) -> Option<&mut E>
pub fn edge_weight_mut(&mut self, a: N, b: N) -> Option<&mut E>
Return a mutable reference to the edge weight connecting a
with b
, or
None
if the edge does not exist in the graph.
Sourcepub fn all_edges(&self) -> AllEdges<'_, N, E, Ty> ⓘ
pub fn all_edges(&self) -> AllEdges<'_, N, E, Ty> ⓘ
Return an iterator over all edges of the graph with their weight in arbitrary order.
Iterator element type is (N, N, &E)
Sourcepub fn all_edges_mut(&mut self) -> AllEdgesMut<'_, N, E, Ty> ⓘ
pub fn all_edges_mut(&mut self) -> AllEdgesMut<'_, N, E, Ty> ⓘ
Return an iterator over all edges of the graph in arbitrary order, with a mutable reference to their weight.
Iterator element type is (N, N, &mut E)
Sourcepub fn into_graph<Ix>(self) -> Graph<N, E, Ty, Ix>where
Ix: IndexType,
pub fn into_graph<Ix>(self) -> Graph<N, E, Ty, Ix>where
Ix: IndexType,
Return a Graph
that corresponds to this GraphMap
.
- Note that node and edge indices in the
Graph
have nothing in common with theGraphMap
s node weightsN
. The node weightsN
are used as node weights in the resultingGraph
, too. - Note that the index type is user-chosen.
Computes in O(|V| + |E|) time (average).
Panics if the number of nodes or edges does not fit with the resulting graph’s index type.
Trait Implementations
Source§impl<N, E, Ty> Build for GraphMap<N, E, Ty>
impl<N, E, Ty> Build for GraphMap<N, E, Ty>
fn add_node(&mut self, weight: Self::NodeWeight) -> Self::NodeId
Source§fn add_edge(
&mut self,
a: Self::NodeId,
b: Self::NodeId,
weight: Self::EdgeWeight,
) -> Option<Self::EdgeId>
fn add_edge( &mut self, a: Self::NodeId, b: Self::NodeId, weight: Self::EdgeWeight, ) -> Option<Self::EdgeId>
None
.Source§fn update_edge(
&mut self,
a: Self::NodeId,
b: Self::NodeId,
weight: Self::EdgeWeight,
) -> Self::EdgeId
fn update_edge( &mut self, a: Self::NodeId, b: Self::NodeId, weight: Self::EdgeWeight, ) -> Self::EdgeId
a
to b
. Return the id of the affected
edge.Source§impl<N, E, Ty> Create for GraphMap<N, E, Ty>
impl<N, E, Ty> Create for GraphMap<N, E, Ty>
fn with_capacity(nodes: usize, edges: usize) -> Self
Source§impl<N, E, Ty> Data for GraphMap<N, E, Ty>
impl<N, E, Ty> Data for GraphMap<N, E, Ty>
type NodeWeight = N
type EdgeWeight = E
Source§impl<N, E, Ty, Item> Extend<Item> for GraphMap<N, E, Ty>
Extend the graph from an iterable of edges.
impl<N, E, Ty, Item> Extend<Item> for GraphMap<N, E, Ty>
Extend the graph from an iterable of edges.
Nodes are inserted automatically to match the edges.
Source§fn extend<I>(&mut self, iterable: I)where
I: IntoIterator<Item = Item>,
fn extend<I>(&mut self, iterable: I)where
I: IntoIterator<Item = Item>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<N, E, Ty> FromElements for GraphMap<N, E, Ty>
impl<N, E, Ty> FromElements for GraphMap<N, E, Ty>
fn from_elements<I>(iterable: I) -> Self
Source§impl<N, E, Ty, Item> FromIterator<Item> for GraphMap<N, E, Ty>
Create a new GraphMap
from an iterable of edges.
impl<N, E, Ty, Item> FromIterator<Item> for GraphMap<N, E, Ty>
Create a new GraphMap
from an iterable of edges.
Source§fn from_iter<I>(iterable: I) -> Selfwhere
I: IntoIterator<Item = Item>,
fn from_iter<I>(iterable: I) -> Selfwhere
I: IntoIterator<Item = Item>,
Source§impl<N, E, Ty> GetAdjacencyMatrix for GraphMap<N, E, Ty>
The GraphMap
keeps an adjacency matrix internally.
impl<N, E, Ty> GetAdjacencyMatrix for GraphMap<N, E, Ty>
The GraphMap
keeps an adjacency matrix internally.
Source§impl<N, E, Ty> Index<(N, N)> for GraphMap<N, E, Ty>
Index GraphMap
by node pairs to access edge weights.
impl<N, E, Ty> Index<(N, N)> for GraphMap<N, E, Ty>
Index GraphMap
by node pairs to access edge weights.
Source§impl<N, E, Ty> IndexMut<(N, N)> for GraphMap<N, E, Ty>
Index GraphMap
by node pairs to access edge weights.
impl<N, E, Ty> IndexMut<(N, N)> for GraphMap<N, E, Ty>
Index GraphMap
by node pairs to access edge weights.