## Graph

グラフ・コンセプトは全てのグラフの概念に共通する要求をある程度含んでいる。 これらは `vertex_descriptor` や `edge_descriptor` 等、 そして `num_vertices()`関数と `num_edges()`関数 に関連する型をいくつか含んでいる。 注目すべきは、 グラフのモデルは、Assignable のモデルである必要はない ということである。 なぜなら、アルゴリズムはグラフのオブジェクトを参照で渡すべきだからである。

### Notation

`G` | グラフのモデルであるところの型。
`g` | 型 `G` のオブジェクト。

### Associated Types

    boost::graph_traits<G>::vertex_descriptor
頂点記述子は抽象的なグラフのインスタンスにおける個々の頂点に対応している。 頂点記述子は Default Constructibleで、 Assignableで、 Equality Comparable でなければならない。
    boost::graph_traits<G>::edge_descriptor
辺記述子はグラフにおける個々の辺 (u,v) に対応している。 辺記述子は Default Constructibleで、 Assignableで、 Equality Comparable でなければならない。
    boost::graph_traits<G>::directed_category
`directed_tag` と `undirected_tag` から選択する。
    boost::graph_traits<G>::edge_parallel_category
グラフのクラスが多重辺(始点と終点が同じ辺)の挿入を許可するかどうかを示す。 2つのタグがあり、 `allow_parallel_edge_tag` と `disallow_parallel_edge_tag` である。
    boost::graph_traits<G>::traversal_category
グラフ上の頂点、辺を巡回するための方法を示す。 `incidence_graph_tag`、 `adjacency_graph_tag`、`bidirectional_graph_tag`、 `vertex_list_graph_tag`、`edge_list_graph_tag`、そして `adjacency_matrix_tag` から選択する。

### Valid Expressions

要求しない。

### Concept Checking Class

      template <class G>
      struct GraphConcept
      {
        typedef typename boost::graph_traits<G>::vertex_descriptor vertex_descriptor;
        typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor;
        typedef typename boost::graph_traits<G>::directed_category directed_category;
        typedef typename boost::graph_traits<G>::edge_parallel_category edge_parallel_category;
        typedef typename boost::graph_traits<G>::traversal_category traversal_category;

        void constraints() {
          function_requires< DefaultConstructibleConcept<vertex_descriptor> >();
          function_requires< EqualityComparableConcept<vertex_descriptor> >();
          function_requires< AssignableConcept<vertex_descriptor> >();
          function_requires< DefaultConstructibleConcept<edge_descriptor> >();
          function_requires< EqualityComparableConcept<edge_descriptor> >();
          function_requires< AssignableConcept<edge_descriptor> >();
        }
        G g;
      };

### See Also

Graph concepts

Copyright © 2000-2001 | Jeremy Siek, Indiana University (jsiek@osl.iu.edu)

Japanese Translation Copyright (C) 2003 KANAHORI Toshihiro <kanahori@k.tsukuba-tech.ac.jp>
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。