Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

MutableGraph

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

C++ Boost

MutableGraph

A MutableGraph can be changed via the addition or removal of edges and vertices.

Refinement of

Graph

Notation

G Тип, который является моделью графа.
г Объект типаG.
е Объект типаboost::graph_traits::edge_descriptor.
u,v являются объектами типаboost::graph_traits::vertex_descriptor.
Iter является объектом типаboost::graph_traits::out_edge_iterator.
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больше не появляется в вершинном наборе графа и больше не является действительным дескриптором вершины.

Complexity Guarantees

  • Edge insertion must be either amortized constant time or it can be O(log(E/V)) if the insertion also checks to prevent the addition of parallel edges (which is a ``feature'' of some graph types).
  • Edge removal is guaranteed to be O(E).
  • Vertex insertion is guaranteed to be amortized constant time.
  • Clearing a vertex is O(E + V).
  • Vertex removal is O(E + V).

Models

  • adjacency_list

Concept Checking Class

  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.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 05:25:56/0.0058679580688477/1