You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> This library is in the alpha stage that may include significant changes to the interface. It is not recommended for general use.
4
+
> This library is in the **alpha stage** that may include significant changes to the interface. It is not
5
+
> recommended for general use.
6
+
7
+
> A **breaking change** in the near future will introduce a new concept of identifier for vertices and edges,
8
+
> similar to the descriptor concept in the Boost Graph Library. It will replace the existing id and references
9
+
> in the API and will allow for more flexibility in the design as well as reducing the number of concepts and
10
+
> functions. Most functions and views will be affected. *Phil - September 2024*.
5
11
6
12
## Overview
7
13
This library designed to provide a useful set of algorithms, views and container(s) for graphs. It also defines
8
14
a core Graph Container Interface that provide the basis of interacting with an abstract adjacency list graph, and
9
15
to provide easy integration with external adjacency list graphs.
10
16
11
-
- bi-partite and n-partite graphs are under investigation.
12
17
- Hyper-graphs are outside the scope of this project.
13
-
- Comments and questions are welcome and can be directed to GitHub [discussions](https://github.com/stdgraph/graph-v2/discussions) or [issues](https://github.com/stdgraph/graph-v2/issues).
18
+
- Comments and questions are welcome and can be directed to GitHub [discussions](https://github.com/stdgraph/graph-v2/discussions)
19
+
or [issues](https://github.com/stdgraph/graph-v2/issues).
14
20
15
21
### Purpose
16
-
This prototype library is an implementation of the proposed Graph Library for ISO Standard C++ as described in P1709.
22
+
This prototype library is an implementation of the proposed Graph Library for ISO Standard C++.
17
23
It has gone through major revisions since it was first introduced in 2019. While we are comfortable of the core design, there is
18
24
still plenty of activity being done and refinements made in its design and implementation. Experimenting with this library is
19
25
encouraged, keeping in mind that breaking changes are expected.
@@ -25,21 +31,19 @@ The goals of the library include:
25
31
3. Define useful concepts and traits that can be used by algorithms to describe their requirements.
26
32
4. Support views for graph traversal commonly used by algorithms.
27
33
5. Support optional, user-defined value_types for an edge, vertex and graph.
28
-
5. Easy integration of existing graph containers.
29
-
6. Have an open design to allow for extensions in the future:
30
-
1. Support for partite (partitioned) graphs. This requires extending (changing?) the Graph Container Interface.
31
-
This is under investigation.
32
-
2. Support the incoming edges on a vertex (e.g. bidirectional graphs).
33
-
3. Investigate features that might make the Interface useful outside P1709, such as sparse vertex_ids.
34
-
This can help validate the existing design and guide decisions for the future.
34
+
6. Allow the use of standard containers to define simple graphs.
35
+
7. Easy integration of existing graph data structures.
36
+
8. Have an open design to allow for extensions in the future:
37
+
1. Support the incoming edges on a vertex (e.g. bidirectional graphs).
38
+
2. Support sparse vertex_ids stored in bi-directional ranges (e.g. `map` and `unordered_map`).
35
39
36
40
## Getting Started
37
-
This is being actively developed with the latest releases of MSVC (VS2022) on Windows and gcc (11) on Linux/MacOS.
41
+
This is being actively developed with the latest releases of MSVC (VS2022) on Windows and gcc (13) on Linux/MacOS.
38
42
Other releases or compilers may or may not work.
39
43
40
44
### Prerequesites
41
-
- C++20 compliant compiler that fully supports concepts and ranges.
42
-
- CMake 20 or later (for CMake Presets)
45
+
- C\+\+20 compliant compiler that fully supports concepts and ranges. (C\+\+23 is required for building the benchmarks.)
46
+
- CMake 26 or later (for CMake Presets)
43
47
44
48
### Quick Start Guide (Linux, WSL, MacOS)
45
49
```bash
@@ -55,48 +59,61 @@ You'll need to assure CMake Presets are enabled in your IDE or other development
55
59
See https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-170 for configuring Microsoft tools.
56
60
57
61
## Description
58
-
In the following tables, P1709 identifies that the feature is in the P1709 proposal. A value of "TBD" indicates that it
59
-
is being considered, subject to the size of the proposal and other priorities.
|[P3126 Overview](https://wg21.link/P3126)| Describes the big picture of what we are proposing. |
111
+
|[P3127 Background](https://wg21.link/P3127)| Background and Terminology, provides the motivation and theoretical background underlying the proposal. |
112
+
|[P3128 Algoritms](https://wg21.link/P3128)| Covers the initial algorithms as well as the ones we'd like to see in the future. |
113
+
|[P3129 Views](https://wg21.link/P3129)| Helpful views for traversing a graph. |
114
+
|[P3130 Graph Container Interface](https://wg21.link/P3130)| The core interface for uniformly accessing graph data structure and adapting to external graphs. |
115
+
|[P3131 Graph Containers](https://wg21.link/P3130)| Includes the `compressed_graph` and how to use standard containers to define simple graphs. |
116
+
|[P3337 Graph Comparison](https://wg21.link/P3337)|*[future]* Syntax and performance comparison to the Boost Graph Library. |
0 commit comments