![]() |
Graph Cpp
Helper Graph class for C++ with CMake support
|
Класс графа (может быть взвешенным и ориентированным). More...
#include <graph.hpp>
Classes | |
class | Edge |
Public Member Functions | |
Graph () | |
Инициализирует новый экземпляр Graph. | |
Graph (const Graph &other)=default | |
Копирующий конструктор. | |
Graph (Graph &&other) noexcept | |
Перемещающий конструктор. Перемещает ресурсы из другого графа. | |
void | AddEdge (const std::pair< vert_t, vert_t > &edge_pair, bool ignore_warning=false) |
void | AddEdge (const std::tuple< vert_t, vert_t, weight_t > &edge_tuple, bool ignore_warning=false) |
void | AddVert (const vert_t &vert) |
bool | ContainsEdge (const std::pair< vert_t, vert_t > &edge) const |
Проверяет, содержится ли ребро в графе (НЕВЗВЕШЕННЫЙ). | |
bool | ContainsEdge (const std::tuple< vert_t, vert_t, weight_t > &edge) const |
Проверяет, содержится ли ребро в графе (ВЗВЕШЕННЫЙ). | |
bool | ContainsVert (const vert_t &vert) const |
Проверяет, содержится ли вершина в графе. | |
std::vector< std::tuple< vert_t, vert_t, weight_t > > | Edges () const |
size_t | EdgesAmount () const |
std::unordered_map< vert_t, std::vector< vert_t > > | GetAdjList () const |
std::vector< std::vector< vert_t > > | GetAdjListWithoutKeys () const |
std::vector< std::vector< weight_t > > | GetAdjMatrix () const |
weight_t | GetEdgeWeight (const std::pair< vert_t, vert_t > &edge) const |
Находит вес ребра в взвешенном графе. | |
bool | IsDirected () const |
Проверяет, направлен ли граф. | |
bool | IsWeighted () const |
Проверяет, взвешен ли граф. | |
void | MakeDirected () |
Делает граф направленным (ничего). | |
void | MakeUndirected () |
Делает граф ненаправленным (удаляет лишние ребра). | |
Graph & | operator= (const Graph &other)=default |
Оператор копирующего присваивания. | |
Graph & | operator= (Graph &&other) noexcept |
Оператор перемещающего присваивания. Перемещает ресурсы из другого. графа. | |
std::ostream & | PrintAdjList (std::ostream &os=std::cout) const |
Выводит в поток список смежности. | |
std::ostream & | PrintEdges (std::ostream &os=std::cout) const |
Выводит в поток список ребер. | |
std::ostream & | PrintVerts (std::ostream &os=std::cout) const |
Выводит в поток список вершин. | |
void | RemoveEdge (const std::pair< vert_t, vert_t > &edge_pair) |
void | RemoveEdge (const std::tuple< vert_t, vert_t, weight_t > &edge_tuple) |
void | RemoveVert (const vert_t &vert) |
void | SetEdgeWeight (const std::pair< vert_t, vert_t > &edge, weight_t new_weight) |
Меняет вес ребра в взвешенном графе. | |
const std::vector< vert_t > & | Verts () const |
size_t | VertsAmount () const |
Static Public Member Functions | |
static Graph | GraphFromAdjList (const std::unordered_map< vert_t, std::vector< vert_t > > &adj_list_dict) |
Создает новый экземпляр Graph. по списку смежности с указанием вершины-ключа (НЕВЗВЕШЕННЫЙ). | |
static Graph | GraphFromAdjList (const std::vector< std::vector< vert_t > > &adj_list) |
Создает новый экземпляр Graph. по списку смежности (НЕВЗВЕШЕННЫЙ). | |
static Graph | GraphFromAdjMatrix (const std::vector< std::vector< weight_t > > &adj_matrix, bool is_weighted=false) |
Создает новый экземпляр Graph по матрице смежности. | |
static Graph | GraphFromMap (const std::unordered_map< std::string, weight_t > &edges_dict) |
Создает новый экземпляр Graph по ребрам. представленными словарем из std::string и weight_t (ВЗВЕШЕННЫЙ). | |
static Graph | GraphFromStrs (const std::vector< std::string > &edges_strs) |
Создает новый экземпляр Graph по ребрам. представленными вектором std::string (НЕВЗВЕШЕННЫЙ). | |
static Graph | GraphNonWeighted (const std::vector< std::pair< vert_t, vert_t > > &edges_pairs) |
Создает новый экземпляр Graph по ребрам, представленными вектором std::pair (НЕВЗВЕШЕННЫЙ). | |
static Graph | GraphWeighted (const std::vector< std::pair< vert_t, vert_t > > &edges_pairs, const std::vector< weight_t > &weights) |
Создает новый экземпляр Graph по ребрам, представленными вектором std::pair и weight_t (ВЗВЕШЕННЫЙ). | |
static Graph | GraphWeighted (const std::vector< std::tuple< vert_t, vert_t, weight_t > > &edges_tuples) |
Создает новый экземпляр Graph по ребрам. представленными вектором std::tuple (ВЗВЕШЕННЫЙ). | |
Private Member Functions | |
Graph (const std::vector< Edge > &edges) | |
void | AddEdge_ (const Edge &edge) |
auto | GetEdgeIter_ (const std::pair< vert_t, vert_t > &edge) |
auto | GetEdgeIter_ (const std::pair< vert_t, vert_t > &edge) const |
auto | GetEdgeIter_ (const std::tuple< vert_t, vert_t, weight_t > &edge) const |
Static Private Member Functions | |
static std::pair< vert_t, vert_t > | ParseEdgeString_ (const std::string &edge_str) |
Private Attributes | |
std::vector< Edge > | edges_ |
bool | is_direct_ = true |
bool | is_weighted_ = false |
std::vector< vert_t > | verts_ |
Friends | |
std::ostream & | operator<< (std::ostream &os, const Graph< vert_t, weight_t >::Edge &edge) |
Класс графа (может быть взвешенным и ориентированным).
vert_t | тип вершин. |
weight_t | тип весов. |
|
inline |
|
default |
Копирующий конструктор.
other | граф, который нужно скопировать. |
|
inlinenoexcept |
Перемещающий конструктор. Перемещает ресурсы из другого графа.
other | граф, ресурсы которого нужно переместить. |
|
inlineprivate |
|
inline |
"AddEdge: weighted graph must consist of weighted edges.
|
inline |
"AddEdge: weighted graph must consist of weighted edges.
|
inlineprivate |
|
inline |
|
inline |
Проверяет, содержится ли ребро в графе (НЕВЗВЕШЕННЫЙ).
edge | ребро. |
true
: содержится. false
: не содержится.
|
inline |
Проверяет, содержится ли ребро в графе (ВЗВЕШЕННЫЙ).
edge | ребро. |
true
: содержится. false
: не содержится.`std::logic_error("ContainsEdge | graph is not weighted.")`. |
|
inline |
|
inline |
std::vector<std::tuple<vert_t, vert_t, weight_t>>
: ребра.
|
inline |
vert_t
: кол-во ребер.
|
inline |
std::unordered_map<vert_t, std::vector<vert_t>>
: список смежности с указанием вершины-ключа.
|
inline |
std::vector<std::vector<vert_t>>
: список смежности. `std::logic_error("GetAdjListWithoutKeys | this method is deleted for std::string.")`. |
|
inline |
std::vector<std::vector<vert_t>>
: матрица смежности. `std::logic_error("GetAdjMatrix | this method is deleted for std::string.")`. |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inline |
Находит вес ребра в взвешенном графе.
edge | ребро. |
weight_t
: вес.`std::logic_error("GetEdgeWeight | graph is not weighted.")`. @throw `std::invalid_argument("GetEdgeWeight: there is no such edge:")`. |
|
inlinestatic |
Создает новый экземпляр Graph. по списку смежности с указанием вершины-ключа (НЕВЗВЕШЕННЫЙ).
adj_list_dict | список смежности с указанием вершины-ключа. |
|
inlinestatic |
Создает новый экземпляр Graph. по списку смежности (НЕВЗВЕШЕННЫЙ).
adj_list | список смежности. |
std::logic_error("GraphFromAdjList | this method (constructor) is deleted for std::string."). |
|
inlinestatic |
Создает новый экземпляр Graph по матрице смежности.
adj_matrix | матрица смежности. |
is_weighted | взвешен ли граф. |
`std::invalid_argument("GraphFromAdjMatrix | AdjacencyMatrix is not squared.")`. @throw `std::invalid_argument("GraphFromAdjMatrix: AdjacencyMatrix is not squared [row problem].")`. @throw `std::logic_error("GraphFromAdjMatrix: this method (constructor) is deleted for std::string.")`. |
|
inlinestatic |
Создает новый экземпляр Graph по ребрам. представленными словарем из std::string и weight_t (ВЗВЕШЕННЫЙ).
edges_dict | ребра графа. |
|
inlinestatic |
Создает новый экземпляр Graph по ребрам. представленными вектором std::string (НЕВЗВЕШЕННЫЙ).
edges_strs | ребра графа. |
|
inlinestatic |
Создает новый экземпляр Graph по ребрам, представленными вектором std::pair (НЕВЗВЕШЕННЫЙ).
edges_pairs | ребра графа. |
|
inlinestatic |
Создает новый экземпляр Graph по ребрам, представленными вектором std::pair и weight_t (ВЗВЕШЕННЫЙ).
edges_pairs | ребра графа. |
weights | веса ребер. |
`std::invalid_argument("GraphWeighted | the sizes of the edges and weights vectors do not match.")`. |
|
inlinestatic |
Создает новый экземпляр Graph по ребрам. представленными вектором std::tuple (ВЗВЕШЕННЫЙ).
edges_tuples | ребра графа. |
|
inline |
|
inline |
|
inline |
Делает граф направленным (ничего).
|
inline |
Делает граф ненаправленным (удаляет лишние ребра).
|
default |
Оператор копирующего присваивания.
other | граф, значения которого нужно присвоить. |
Graph&
: ссылка на текущий объект.
|
inlinenoexcept |
Оператор перемещающего присваивания. Перемещает ресурсы из другого. графа.
other | граф, ресурсы которого нужно переместить. |
Graph&
: ссылка на текущий объект.
|
inlinestaticprivate |
|
inline |
Выводит в поток список смежности.
os | входной поток. |
std::ostream&
: выходной поток.
|
inline |
Выводит в поток список ребер.
os | входной поток. |
std::ostream&
: выходной поток.
|
inline |
Выводит в поток список вершин.
os | входной поток. |
|
inline |
`std::invalid_argument("RemoveEdge | there is no such edge:")`. |
|
inline |
`std::invalid_argument("RemoveEdge | there is no such edge:")`. |
|
inline |
`std::invalid_argument("RemoveVert | there is no such vert:")`. |
|
inline |
Меняет вес ребра в взвешенном графе.
edge | ребро. |
new_weight | вес. |
`std::logic_error("SetEdgeWeight | graph is not weighted.")`. @throw `std::invalid_argument("SetEdgeWeight: there is no such edge:")`. |
|
inline |
const std::vector<vert_t>&
: вершины.
|
inline |
size_t
: кол-во вершин.
|
friend |
|
private |
|
private |
|
private |
|
private |