@@ -160,7 +160,7 @@ void mergeTracks(const feature::MapFeaturesPerView& featuresPerView, const MapIn
160
160
// map of DuplicateFeatureId(x, y, scale) to
161
161
// pair of (set<featureId>, node)
162
162
HashMap<size_t , HashMap<feature::EImageDescriberType,
163
- HashMap<DuplicateFeatureId, std::pair<std::set<size_t >, const MapIndexToNode::mapped_type* >>>>
163
+ HashMap<DuplicateFeatureId, std::pair<std::set<size_t >, MapIndexToNode::mapped_type>>>>
164
164
duplicateFeaturesPerView;
165
165
166
166
// per viewId pair
@@ -191,38 +191,42 @@ void mergeTracks(const feature::MapFeaturesPerView& featuresPerView, const MapIn
191
191
{
192
192
{
193
193
auto & featureI = featuresI[m._i ];
194
- auto & [duplicateFeatureIdsI, duplicateFeatureNodeI] =
195
- duplicateFeaturesI[DuplicateFeatureId (featureI.x (), featureI.y (), featureI.scale ())];
196
194
IndexedFeaturePair pairI (I, KeypointId (descType, m._i ));
197
195
auto & nodeI = map_indexToNode.at (pairI);
196
+ DuplicateFeatureId duplicateIdI (featureI.x (), featureI.y (), featureI.scale ());
197
+ const auto & duplicateFeaturesI_it = duplicateFeaturesI.find (duplicateIdI);
198
198
// if no duplicates yet found, add to map and update values
199
- if (duplicateFeatureNodeI == nullptr )
199
+ if (duplicateFeaturesI_it == duplicateFeaturesI.end ())
200
+ duplicateFeaturesI[duplicateIdI] = std::make_pair (std::set<size_t >({m._i }), nodeI);
201
+ else
200
202
{
201
- duplicateFeatureIdsI. insert (m. _i ) ;
202
- duplicateFeatureNodeI = &nodeI ;
203
- }
204
- // if not already in corresponding duplicates set, add to set and join nodes
205
- else if (duplicateFeatureIdsI. insert (m. _i ). second )
206
- {
207
- _d-> tracksUF -> join (nodeI, *duplicateFeatureNodeI);
203
+ auto & duplicateFeatureIdsI = duplicateFeaturesI_it-> second . first ;
204
+ auto & duplicateFeatureNodeI = duplicateFeaturesI_it-> second . second ;
205
+ // if not already in corresponding duplicates set, add to set and join nodes
206
+ if (duplicateFeatureIdsI. insert (m. _i ). second )
207
+ {
208
+ _d-> tracksUF -> join (nodeI, duplicateFeatureNodeI);
209
+ }
208
210
}
209
211
}
210
212
{
211
213
auto & featureJ = featuresJ[m._j ];
212
- auto & [duplicateFeatureIdsJ, duplicateFeatureNodeJ] =
213
- duplicateFeaturesJ[DuplicateFeatureId (featureJ.x (), featureJ.y (), featureJ.scale ())];
214
214
IndexedFeaturePair pairJ (J, KeypointId (descType, m._j ));
215
215
auto & nodeJ = map_indexToNode.at (pairJ);
216
+ DuplicateFeatureId duplicateIdJ (featureJ.x (), featureJ.y (), featureJ.scale ());
217
+ const auto & duplicateFeaturesJ_it = duplicateFeaturesJ.find (duplicateIdJ);
216
218
// if no duplicates yet found, add to map and update values
217
- if (duplicateFeatureNodeJ == nullptr )
218
- {
219
- duplicateFeatureIdsJ.insert (m._j );
220
- duplicateFeatureNodeJ = &nodeJ;
221
- }
222
- // if not already in corresponding duplicates set, add to set and join nodes
223
- else if (duplicateFeatureIdsJ.insert (m._j ).second )
219
+ if (duplicateFeaturesJ_it == duplicateFeaturesJ.end ())
220
+ duplicateFeaturesJ[duplicateIdJ] = std::make_pair (std::set<size_t >({m._j }), nodeJ);
221
+ else
224
222
{
225
- _d->tracksUF ->join (nodeJ, *duplicateFeatureNodeJ);
223
+ auto & duplicateFeatureIdsJ = duplicateFeaturesJ_it->second .first ;
224
+ auto & duplicateFeatureNodeJ = duplicateFeaturesJ_it->second .second ;
225
+ // if not already in corresponding duplicates set, add to set and join nodes
226
+ if (duplicateFeatureIdsJ.insert (m._j ).second )
227
+ {
228
+ _d->tracksUF ->join (nodeJ, duplicateFeatureNodeJ);
229
+ }
226
230
}
227
231
}
228
232
}
0 commit comments