Fishnet 2.0.1
Framework for Graph-Based Analysis of GIS Vector Data
Loading...
Searching...
No Matches
BFSClustering.hpp
Go to the documentation of this file.
1#pragma once
4
5namespace fishnet {
6
7template<typename T>
9private:
10 fishnet::util::BiPredicate_t<T,T> inRelationPredicate;
11
12public:
14 : inRelationPredicate(std::forward<fishnet::util::BiPredicate_t<T,T>>(inRelationPredicate)) {}
15
16 BFSClustering(): inRelationPredicate(fishnet::util::TrueBiPredicate()) {}
17
18 template<fishnet::graph::Graph G>
20 {
21 static_assert(std::is_same_v<typename G::node_type, T>, "Graph node type must match clustering type T");
22 ClusterResult<T> result;
23 result.clusters = fishnet::graph::BFS::connectedComponents(graph, inRelationPredicate).get();
24 return result;
25 }
26};
27
28static_assert(ClusterAlgorithm<BFSClustering<int>, fishnet::graph::UndirectedGraph<int>>);
29
30} // namespace fishnet
Definition BFSClustering.hpp:8
BFSClustering(fishnet::util::BiPredicate< T, T > auto &&inRelationPredicate)
Definition BFSClustering.hpp:13
BFSClustering()
Definition BFSClustering.hpp:16
ClusterResult< typename G::node_type > operator()(const G &graph) const
Definition BFSClustering.hpp:19
Definition FunctionalConcepts.hpp:42
auto connectedComponents(const G &graph, fishnet::util::BiPredicate< typename G::node_type > auto const &inRelation)
Compute connected components of the graph.
Definition BFSAlgorithm.hpp:95
graph::__impl::BaseGraph< UndirectedEdge< N, Hash, Equal >, AdjContainer > UndirectedGraph
Simple Undirected Graph type.
Definition Graph.hpp:20
std::function< bool(const T &, const R &)> BiPredicate_t
Definition FunctionalConcepts.hpp:45
Definition BFSClustering.hpp:5
STL namespace.
Definition ClusterAlgorithm.hpp:9
std::vector< std::vector< R > > clusters
Definition ClusterAlgorithm.hpp:10