# UNDF: UNDF-2026-000000949 --- a/src/tiled/mapdocument.cpp +++ b/src/tiled/mapdocument.cpp @@ -1225,6 +1225,9 @@ static QList sortLayers(const Map &map, const QList &layers) if (layers.size() < 2) return layers; + const QSet layerSet(layers.begin(), layers.end()); + QList sorted; sorted.reserve(layers.size()); LayerIterator iterator(&map); while (Layer *layer = iterator.next()) { - if (layers.contains(layer)) + if (layerSet.contains(layer)) sorted.append(layer); } @@ -1247,6 +1250,9 @@ static QList sortObjects(const Map &map, const QList & if (objects.size() < 2) return objects; + const QSet objectSet(objects.begin(), objects.end()); + QList sorted; sorted.reserve(objects.size()); LayerIterator iterator(&map); while (Layer *layer = iterator.next()) { if (layer->layerType() != Layer::ObjectGroupType) continue; for (MapObject *mapObject : static_cast(layer)->objects()) { - if (objects.contains(mapObject)) + if (objectSet.contains(mapObject)) sorted.append(mapObject); } } @@ -686,7 +686,8 @@ void MapDocument::duplicateLayers(const QList &layers) // Duplicate layers in the right order (groups before their children) + const QSet layerSet(layers.begin(), layers.end()); LayerIterator iterator(mMap.get()); iterator.toBack(); while (Layer *layer = iterator.previous()) - if (layers.contains(layer)) + if (layerSet.contains(layer)) layersToDuplicate.append(layer); @@ -808,7 +809,8 @@ void MapDocument::moveLayersUp(const QList &layers) // Move layers in the right order, and abort if one of the layers can't be // moved (iterating backwards because when moving layers up we need to // start moving the top-most layer first) + const QSet layerSet(layers.begin(), layers.end()); LayerIterator iterator(mMap.get()); iterator.toBack(); while (Layer *layer = iterator.previous()) { - if (layers.contains(layer)) { + if (layerSet.contains(layer)) { if (!MoveLayer::canMoveUp(*layer)) return; @@ -837,6 +839,7 @@ void MapDocument::moveLayersDown(const QList &layers) // Move layers in the right order, and abort if one of the layers can't be moved + const QSet layerSet(layers.begin(), layers.end()); for (Layer *layer : mMap->allLayers()) { - if (layers.contains(layer)) { + if (layerSet.contains(layer)) { if (!MoveLayer::canMoveDown(*layer)) return;