From a71492cc024dcbf58a28fd4938ab1054dc29bc26 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Tue, 27 Jun 2023 18:12:00 +0200
Subject: [PATCH] [PL/DS] Use unordered set for faster search

---
 ProcessLib/CreateDeactivatedSubdomain.cpp | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/ProcessLib/CreateDeactivatedSubdomain.cpp b/ProcessLib/CreateDeactivatedSubdomain.cpp
index 47fa3e0f778..32cec4d861c 100644
--- a/ProcessLib/CreateDeactivatedSubdomain.cpp
+++ b/ProcessLib/CreateDeactivatedSubdomain.cpp
@@ -91,7 +91,7 @@ static std::vector<std::vector<std::size_t>> extractElementsAlongOuterNodes(
 
 static DeactivatedSubdomainMesh createDeactivatedSubdomainMesh(
     MeshLib::Mesh const& mesh,
-    std::vector<int> const& deactivated_subdomain_material_ids)
+    std::unordered_set<int> const& deactivated_subdomain_material_ids)
 {
     // An element is active if its material id matches one of the deactivated
     // subdomain material ids.
@@ -99,11 +99,8 @@ static DeactivatedSubdomainMesh createDeactivatedSubdomainMesh(
         [&deactivated_subdomain_material_ids,
          &material_ids = *materialIDs(mesh)](std::size_t element_id)
     {
-        int const element_material_id = material_ids[element_id];
-        return std::any_of(begin(deactivated_subdomain_material_ids),
-                           end(deactivated_subdomain_material_ids),
-                           [&](int const material_id)
-                           { return material_id == element_material_id; });
+        return deactivated_subdomain_material_ids.contains(
+            material_ids[element_id]);
     };
 
     auto const& elements = mesh.getElements();
@@ -271,7 +268,8 @@ DeactivatedSubdomain createDeactivatedSubdomain(
 
     auto deactivated_subdomain_material_ids =
         //! \ogs_file_param{prj__process_variables__process_variable__deactivated_subdomains__deactivated_subdomain__material_ids}
-        config.getConfigParameter("material_ids", std::vector<int>{});
+        config.getConfigParameter("material_ids", std::vector<int>{}) |
+        ranges::to<std::unordered_set>();
 
     if (deactivated_subdomain_material_ids.empty())
     {
@@ -280,9 +278,6 @@ DeactivatedSubdomain createDeactivatedSubdomain(
             "program terminates now.");
     }
 
-    std::sort(deactivated_subdomain_material_ids.begin(),
-              deactivated_subdomain_material_ids.end());
-
     if (materialIDs(mesh) == nullptr)
     {
         OGS_FATAL(
-- 
GitLab