![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
MutableGraphBoost , ,
|
G | Тип, который является моделью графа. |
г | Объект типаG. |
е | Объект типаboost::graph_traits |
u,v | являются объектами типаboost::graph_traits |
Iter | является объектом типаboost::graph_traits |
p | является объектом типа, который моделируетПредикати тип аргумента которого соответствуеттипу edge_descriptor. |
add_edge(u, v, g) | Вставляет край(u,v)в граф и возвращает дескриптор края, указывающий на новый край. Если граф не допускает параллельных краев, а край(u,v)уже находится в графе, то возвращенный флагboolявляетсяложными возвращенный дескриптор края указывает на уже существующий край. Обратите внимание, что для ненаправленных графов(u,v)является тем же краем, что и(v,u), поэтому после вызова функцииadd_edge()это означает, что край(u,v)появится на внешних краяхuи(u,v)(или эквивалентно(v,u)) появится на внешних краяхv. Иными словами,vбудет примыкать кuиuбудет примыкать кv. Тип возврата:std::pair |
remove_edge(u, v, g) | Удаляйте край(u,v)из графа. Если график позволяет параллельные края, это устраняет все случаи(u,v). Тип возврата:пустота Предусловие:uиvявляются вершинами на графике. Постусловие:(u,v)больше не находится в краю, установленном дляг . |
remove_edge(e, g) | Удалите крайииз графа. Тип возврата:пустота Предварительное условие:еявляется краем в графе. Постусловие:ебольше не находится в краю, установленном дляг. |
remove_edge(iter, g) | Удалите край, указанныйитериз графа. Это выражение требуется только тогда, когда график также моделируетIncidenceGraph . Тип возврата:пустота Предварительное условие:*итерявляется краем в графе. Посткондиционер:*итербольше не находится в краевом наборе дляг. |
remove_edge_if(p, g) | Удалите все края из графаг, для которого предикатрвозвращается истинным. Тип возврата:пустота |
remove_out_edge_if(u, p, g) | Удалите все крайности вершиныу, для которых предикатрвозвращается истинным. Это выражение требуется только тогда, когда график также моделируетIncidenceGraph . Тип возврата:пустота |
remove_in_edge_if(u, p, g) | Удалите все крайности вершиныу, для которых предикатрвозвращается истинным. Это выражение требуется только тогда, когда график также моделируетДвунаправленный Граф. Тип возврата:пустота |
add_vertex(g) | Добавьте новую вершину в граф. Возвращаетсяvertex_descriptorдля новой вершины. Тип возврата:vertex_descriptor |
clear_vertex(u, g) | Удалите все края до и от вершиныуиз графа. Тип возврата:пустота Предусловие:uявляется действительным дескриптором вершиныg. Постусловие:uне появляется в качестве источника или мишени какого-либо края вg. |
remove_vertex(u, g) | Удалитеuиз вершинного множества графа. Обратите внимание, что неопределенное поведение может возникнуть, если на графике остаются края, целью которых являетсяу. Как правило,clear_vertex()Функция должна быть названа первой. Тип возврата:пустота Предварительное условие:uявляется действительным дескриптором вершиныg. Послесловие:num_vertices(g)на одну меньше,uбольше не появляется в вершинном наборе графа и больше не является действительным дескриптором вершины. |
template <class G> struct MutableGraphConcept { typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; void constraints() { v = add_vertex(g); clear_vertex(v, g); remove_vertex(v, g); e_b = add_edge(u, v, g); remove_edge(u, v, g); remove_edge(e, g); } G g; edge_descriptor e; std::pair<edge_descriptor, bool> e_b; typename boost::graph_traits<G>::vertex_descriptor u, v; typename boost::graph_traits<G>::out_edge_iterator iter; }; template <class edge_descriptor> struct dummy_edge_predicate { bool operator()(const edge_descriptor& e) const { return false; } }; template <class G> struct MutableIncidenceGraphConcept { void constraints() { BOOST_CONCEPT_ASSERT(( MutableGraph<G> )); remove_edge(iter, g); remove_out_edge_if(u, p, g); } G g; typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; dummy_edge_predicate<edge_descriptor> p; typename boost::graph_traits<G>::vertex_descriptor u; typename boost::graph_traits<G>::out_edge_iterator iter; }; template <class G> struct MutableBidirectionalGraphConcept { void constraints() { BOOST_CONCEPT_ASSERT(( MutableIncidenceGraph<G> )); remove_in_edge_if(u, p, g); } G g; typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; dummy_edge_predicate<edge_descriptor> p; typename boost::graph_traits<G>::vertex_descriptor u; }; template <class G> struct MutableEdgeListGraphConcept { void constraints() { BOOST_CONCEPT_ASSERT(( MutableGraph<G> )); remove_edge_if(p, g); } G g; typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; dummy_edge_predicate<edge_descriptor> p; };
Copyright © 2000-2001 | Джереми Сик, Университет Индианыjsiek@osl.iu.edu |
Статья MutableGraph раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |