Skip to content

v0.2.53..v0.2.54 changeset RemoveDuplicateRelationMembersVisitor.cpp

Garret Voltz edited this page Mar 31, 2020 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/visitors/RemoveDuplicateRelationMembersVisitor.cpp b/hoot-core/src/main/cpp/hoot/core/visitors/RemoveDuplicateRelationMembersVisitor.cpp
index 481528f..5185667 100644
--- a/hoot-core/src/main/cpp/hoot/core/visitors/RemoveDuplicateRelationMembersVisitor.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/visitors/RemoveDuplicateRelationMembersVisitor.cpp
@@ -22,7 +22,7 @@
  * This will properly maintain the copyright information. DigitalGlobe
  * copyrights will be updated automatically.
  *
- * @copyright Copyright (C) 2018, 2019 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2018, 2019, 2020 DigitalGlobe (http://www.digitalglobe.com/)
  */
 
 #include "RemoveDuplicateRelationMembersVisitor.h"
@@ -34,7 +34,6 @@
 
 // Qt
 #include <QVector>
-#include <QSet>
 
 namespace hoot
 {
@@ -53,18 +52,23 @@ void RemoveDuplicateRelationMembersVisitor::visit(const ElementPtr& e)
     const std::vector<RelationData::Entry>& members = relation->getMembers();
     if (members.size() > 1)
     {
-      QSet<RelationData::Entry> uniqueMembers;
+      // use an ordered collection here; entry doesn't have an < implementation, otherwise
+      // std::set could be used
+      QList<RelationData::Entry> uniqueMembers;
       for (std::vector<RelationData::Entry>::const_iterator it = members.begin();
            it != members.end(); ++it)
       {
-        uniqueMembers.insert(*it);
+        if (!uniqueMembers.contains(*it))
+        {
+          uniqueMembers.append(*it);
+        }
       }
 
-      // no point in updating them members if there were no dupes
+      // no point in updating the members if there were no dupes
       if (uniqueMembers.size() < (int)members.size())
       {
-        _numAffected += ((int)members.size() - uniqueMembers.size());
-        relation->setMembers(uniqueMembers.toList().toVector().toStdVector());
+        _numAffected += (members.size() - uniqueMembers.size());
+        relation->setMembers(uniqueMembers.toVector().toStdVector());
       }
     }
   }
Clone this wiki locally