A single threaded boost graph that repeatedly removes and then adds same edges later seems to be faster than a multi-threaded filtered_graph that uses edge predicates to concurrently do the same on multiple filtered graphs of the same underlying graph.
Possibly, filtered_graph traverses each and every edge and applies the predicate.
Is there a way to directly generate a filtered_graph without predicates i.e. use functions like remove_edge but actually create a filtered_graph?
Just use copy_graph
on the filtered graph: