From dd935fa70969f385d1aff9e576aefc1e6b0aa8bd Mon Sep 17 00:00:00 2001 From: Carl Johnsen Date: Thu, 8 Aug 2024 08:40:22 +0000 Subject: [PATCH] #37 Changed the internal queue of labels to check in merge_labels from being a vector to a stack --- src/lib/cpp/cpu/connected_components.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/lib/cpp/cpu/connected_components.cc b/src/lib/cpp/cpu/connected_components.cc index 635c4c5..87e7267 100644 --- a/src/lib/cpp/cpu/connected_components.cc +++ b/src/lib/cpp/cpu/connected_components.cc @@ -6,6 +6,7 @@ #include #include #include +#include #include // Debug functions @@ -963,21 +964,21 @@ std::tuple,std::vector,int64_t> merge_labels(mappi }; int64_t next_free = 1; - std::vector> to_check; - for (int64_t i = 1; i < renames[0].size(); i++) { + std::stack> to_check; + for (int64_t i = 1; i < (int64_t)renames[0].size(); i++) { if (renames[0][i] != 0) continue; renames[0][i] = next_free; for (int64_t entry : mappings[0][i]) { - to_check.push_back({1, entry}); + to_check.push({1, entry}); } while (!to_check.empty()) { - auto [current, entry] = to_check.back(); - to_check.pop_back(); + auto [current, entry] = to_check.top(); + to_check.pop(); renames[current][entry] = next_free; for (int64_t entry2 : mappings[current][entry]) { if (renames[!current][entry2] == 0) - to_check.push_back({!current, entry2}); + to_check.push({!current, entry2}); } } @@ -985,7 +986,7 @@ std::tuple,std::vector,int64_t> merge_labels(mappi } // Renames the rest which haven't been touched - for (int64_t i = 1; i < renames[1].size(); i++) { + for (int64_t i = 1; i < (int64_t)renames[1].size(); i++) { if (renames[1][i] == 0) renames[1][i] = next_free++; }