# UNDF: UNDF-2026-000000979 --- a/src/Airports/groundnetwork.hxx +++ b/src/Airports/groundnetwork.hxx @@ -8,6 +8,7 @@ #include #include +#include #include @@ -189,6 +190,7 @@ FGParkingList m_parkings; FGTaxiNodeVector m_nodes; + std::unordered_set m_nodeSet; // O(1) dedup for addSegment/addParking FGTaxiNodeRef findNodeByIndex(int index) const; --- a/src/Airports/groundnetwork.cxx +++ b/src/Airports/groundnetwork.cxx @@ -558,22 +558,22 @@ void FGGroundNetwork::addSegment(const FGTaxiNodeRef& from, const FGTaxiNodeRef& to) { FGTaxiSegment* seg = new FGTaxiSegment(from, to); segments.push_back(seg); - FGTaxiNodeVector::iterator it = std::find(m_nodes.begin(), m_nodes.end(), from); - if (it == m_nodes.end()) { + if (m_nodeSet.find(from.get()) == m_nodeSet.end()) { + m_nodeSet.insert(from.get()); m_nodes.push_back(from); } - it = std::find(m_nodes.begin(), m_nodes.end(), to); - if (it == m_nodes.end()) { + if (m_nodeSet.find(to.get()) == m_nodeSet.end()) { + m_nodeSet.insert(to.get()); m_nodes.push_back(to); } } void FGGroundNetwork::addParking(const FGParkingRef& park) { m_parkings.push_back(park); - FGTaxiNodeVector::iterator it = std::find(m_nodes.begin(), m_nodes.end(), park); - if (it == m_nodes.end()) { + if (m_nodeSet.find(park.get()) == m_nodeSet.end()) { + m_nodeSet.insert(park.get()); m_nodes.push_back(park); } }