6
6
7
7
template <typename vert_t >
8
8
concept AllowedVertType =
9
- std::is_integral_v <vert_t > || std::is_same_v<vert_t , std::string>;
9
+ std::is_arithmetic_v <vert_t > || std::is_same_v<vert_t , std::string>;
10
10
11
11
template <typename weight_t >
12
- concept AllowedWeightType =
13
- std::is_integral_v<weight_t > || std::is_floating_point_v<weight_t >;
12
+ concept AllowedWeightType = std::is_arithmetic_v<weight_t >;
14
13
15
14
// MARK: VertFromTuple
16
15
@@ -36,9 +35,6 @@ inline weight_t WeightFromTuple(
36
35
37
36
/* *
38
37
* @brief Класс графа (может быть взвешенным и ориентированным)
39
- * @details Поддерживаемые типы:
40
- * вес: char, short, int, long, size_t, float, double, long double
41
- * вершины: std::string, char, short, int, long, size_t
42
38
* @tparam vert_t: тип вершин
43
39
* @tparam weight_t: тип весов
44
40
*/
@@ -209,7 +205,7 @@ class Graph {
209
205
static Graph GraphFromAdjMatrix (
210
206
const std::vector<std::vector<weight_t >>& adj_matrix,
211
207
bool is_weighted = false ) {
212
- if constexpr (std::is_integral_v <vert_t >) {
208
+ if constexpr (std::is_arithmetic_v <vert_t >) {
213
209
if (adj_matrix.empty ()) return Graph ();
214
210
215
211
std::vector<Edge> edges{};
@@ -253,7 +249,7 @@ class Graph {
253
249
*/
254
250
static Graph GraphFromAdjList (
255
251
const std::vector<std::vector<vert_t >>& adj_list) {
256
- if constexpr (std::is_integral_v <vert_t >) {
252
+ if constexpr (std::is_arithmetic_v <vert_t >) {
257
253
if (adj_list.empty ()) return Graph ();
258
254
259
255
std::vector<Edge> edges{};
@@ -394,7 +390,7 @@ class Graph {
394
390
* for std::string.")`
395
391
*/
396
392
std::vector<std::vector<vert_t >> GetAdjListWithoutKeys () const {
397
- if constexpr (std::is_integral_v <vert_t >) {
393
+ if constexpr (std::is_arithmetic_v <vert_t >) {
398
394
std::vector<std::vector<vert_t >> adj_list (
399
395
*std::max_element (Verts ().begin (), Verts ().end ()) + 1 );
400
396
@@ -431,7 +427,7 @@ class Graph {
431
427
* std::string.")`
432
428
*/
433
429
std::vector<std::vector<weight_t >> GetAdjMatrix () const {
434
- if constexpr (std::is_integral_v <vert_t >) {
430
+ if constexpr (std::is_arithmetic_v <vert_t >) {
435
431
std::vector<std::vector<weight_t >> adj_matrix (
436
432
VertsAmount (), std::vector<weight_t >(VertsAmount (), 0 ));
437
433
@@ -528,7 +524,7 @@ class Graph {
528
524
it->SetWeight (new_weight);
529
525
}
530
526
531
- void AddVert (vert_t vert) {
527
+ void AddVert (const vert_t & vert) {
532
528
if (!Contains (verts_, vert)) verts_.push_back (vert);
533
529
}
534
530
@@ -554,8 +550,8 @@ class Graph {
554
550
}
555
551
556
552
// / @throw `std::invalid_argument("RemoveVert: there is no such vert:")`
557
- void RemoveVert (vert_t vert) {
558
- if constexpr (std::is_integral_v <vert_t >) {
553
+ void RemoveVert (const vert_t & vert) {
554
+ if constexpr (std::is_arithmetic_v <vert_t >) {
559
555
if (!Contains (Verts (), vert))
560
556
throw std::invalid_argument (
561
557
" RemoveVert: there is no such vert in graph: " +
@@ -663,7 +659,7 @@ class Graph {
663
659
const std::string& Name () const {
664
660
static std::string name;
665
661
666
- if constexpr (std::is_integral_v <vert_t >) {
662
+ if constexpr (std::is_arithmetic_v <vert_t >) {
667
663
if (IsWeighted ())
668
664
name = " [" + std::to_string (StartVert ()) + " ->" +
669
665
std::to_string (EndVert ()) +
@@ -715,7 +711,7 @@ class Graph {
715
711
AddEdge_ (edge);
716
712
}
717
713
718
- if constexpr (std::is_integral_v <vert_t >) {
714
+ if constexpr (std::is_arithmetic_v <vert_t >) {
719
715
// кол-во вершин = максимальная вершина среди ребер, т.е. в этом случае
720
716
// происходит заполнение вершин до наибольшей из них в списке ребер
721
717
vert_t max_vert = edges[0 ].StartVert ();
@@ -757,7 +753,7 @@ class Graph {
757
753
throw std::invalid_argument (" EdgeString: invalid edge string format: " +
758
754
edge_str);
759
755
760
- if constexpr (std::is_integral_v <vert_t >) {
756
+ if constexpr (std::is_arithmetic_v <vert_t >) {
761
757
try {
762
758
start_vert = std::stoul (edge_str.substr (0 , pos));
763
759
end_vert = std::stoul (edge_str.substr (pos + 2 ));
0 commit comments