@@ -113,34 +113,13 @@ bool Graph<vert_t, weight_t>::ContainsEdge(
113
113
if (!IsWeighted ())
114
114
throw std::logic_error (" ContainsEdge: graph is not weighted." );
115
115
116
- auto [start_vert, end_vert, weight] = edge;
117
-
118
- auto it =
119
- std::find_if (edges_.begin (), edges_.end (),
120
- [start_vert, end_vert, weight, this ](const auto & e) {
121
- return (e.StartVert () == start_vert &&
122
- e.EndVert () == end_vert && e.Weight () == weight) ||
123
- (!IsDirected () && e.StartVert () == end_vert &&
124
- e.EndVert () == start_vert && e.Weight () == weight);
125
- });
126
-
127
- return it != edges_.end ();
116
+ return GetEdgeIter (edge) != edges_.end ();
128
117
}
129
118
130
119
template <AllowedVertType vert_t , AllowedWeightType weight_t >
131
120
bool Graph<vert_t , weight_t >::ContainsEdge(
132
121
const std::pair<vert_t , vert_t >& edge) const {
133
- auto [start_vert, end_vert] = edge;
134
-
135
- auto it = std::find_if (
136
- edges_.begin (), edges_.end (),
137
- [start_vert, end_vert, this ](const auto & e) {
138
- return (e.StartVert () == start_vert && e.EndVert () == end_vert) ||
139
- (!IsDirected () && e.StartVert () == end_vert &&
140
- e.EndVert () == start_vert);
141
- });
142
-
143
- return it != edges_.end ();
122
+ return GetEdgeIter (edge) != edges_.end ();
144
123
}
145
124
146
125
template <AllowedVertType vert_t , AllowedWeightType weight_t >
@@ -149,15 +128,7 @@ weight_t Graph<vert_t, weight_t>::GetEdgeWeight(
149
128
if (!IsWeighted ())
150
129
throw std::logic_error (" GetEdgeWeight: graph is not weighted." );
151
130
152
- auto [start_vert, end_vert] = edge;
153
-
154
- auto it = std::find_if (
155
- edges_.begin (), edges_.end (),
156
- [start_vert, end_vert, this ](const auto & e) {
157
- return (e.StartVert () == start_vert && e.EndVert () == end_vert) ||
158
- (!IsDirected () && e.StartVert () == end_vert &&
159
- e.EndVert () == start_vert);
160
- });
131
+ auto it = GetEdgeIter (edge);
161
132
162
133
if (it == edges_.end ())
163
134
throw std::invalid_argument (" GetEdgeWeight: there is no such edge: " +
@@ -166,6 +137,21 @@ weight_t Graph<vert_t, weight_t>::GetEdgeWeight(
166
137
return it->Weight ();
167
138
}
168
139
140
+ template <AllowedVertType vert_t , AllowedWeightType weight_t >
141
+ void Graph<vert_t , weight_t >::SetEdgeWeight(
142
+ const std::pair<vert_t , vert_t >& edge, weight_t new_weight) {
143
+ if (!IsWeighted ())
144
+ throw std::logic_error (" SetEdgeWeight: graph is not weighted." );
145
+
146
+ auto it = GetEdgeIter (edge);
147
+
148
+ if (it == edges_.end ())
149
+ throw std::invalid_argument (" SetEdgeWeight: there is no such edge: " +
150
+ Edge (edge).Name ());
151
+
152
+ it->SetWeight (new_weight);
153
+ }
154
+
169
155
template <AllowedVertType vert_t , AllowedWeightType weight_t >
170
156
void Graph<vert_t , weight_t >::AddVert(vert_t vert) {
171
157
if (!Contains (verts_, vert)) verts_.push_back (vert);
0 commit comments