diff --git a/redfish-core/lib/power.hpp b/redfish-core/lib/power.hpp
index 8eacb9b..118f397 100644
--- a/redfish-core/lib/power.hpp
+++ b/redfish-core/lib/power.hpp
@@ -131,8 +131,7 @@
             asyncResp->res.jsonValue["PowerControl"] = nlohmann::json::array();
 
             auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
-                asyncResp, chassisName,
-                sensors::dbus::paths.at(sensors::node::power),
+                asyncResp, chassisName, sensors::dbus::powerPaths,
                 sensors::node::power);
 
             getChassisData(sensorAsyncResp);
@@ -322,8 +321,7 @@
                     return;
                 }
                 auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
-                    asyncResp, chassisName,
-                    sensors::dbus::paths.at(sensors::node::power),
+                    asyncResp, chassisName, sensors::dbus::powerPaths,
                     sensors::node::power);
 
                 std::optional<std::vector<nlohmann::json>> voltageCollections;
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 58e8891..3a5c73b 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -44,33 +44,44 @@
 static constexpr std::string_view thermal = "Thermal";
 } // namespace node
 
+// clang-format off
 namespace dbus
 {
+auto powerPaths = std::to_array<std::string_view>({
+    "/xyz/openbmc_project/sensors/voltage",
+    "/xyz/openbmc_project/sensors/power"
+});
 
-static const boost::container::flat_map<std::string_view,
-                                        std::vector<const char*>>
-    paths = {{node::power,
-              {"/xyz/openbmc_project/sensors/voltage",
-               "/xyz/openbmc_project/sensors/power"}},
-             {node::sensors,
-              {"/xyz/openbmc_project/sensors/power",
-               "/xyz/openbmc_project/sensors/current",
-               "/xyz/openbmc_project/sensors/airflow",
+auto sensorPaths = std::to_array<std::string_view>({
+    "/xyz/openbmc_project/sensors/power",
+    "/xyz/openbmc_project/sensors/current",
+    "/xyz/openbmc_project/sensors/airflow",
                "/xyz/openbmc_project/sensors/humidity",
 #ifdef BMCWEB_NEW_POWERSUBSYSTEM_THERMALSUBSYSTEM
-               "/xyz/openbmc_project/sensors/voltage",
-               "/xyz/openbmc_project/sensors/fan_tach",
-               "/xyz/openbmc_project/sensors/temperature",
-               "/xyz/openbmc_project/sensors/fan_pwm",
-               "/xyz/openbmc_project/sensors/altitude",
-               "/xyz/openbmc_project/sensors/energy",
+    "/xyz/openbmc_project/sensors/voltage",
+    "/xyz/openbmc_project/sensors/fan_tach",
+    "/xyz/openbmc_project/sensors/temperature",
+    "/xyz/openbmc_project/sensors/fan_pwm",
+    "/xyz/openbmc_project/sensors/altitude",
+    "/xyz/openbmc_project/sensors/energy",
 #endif
-               "/xyz/openbmc_project/sensors/utilization"}},
-             {node::thermal,
-              {"/xyz/openbmc_project/sensors/fan_tach",
-               "/xyz/openbmc_project/sensors/temperature",
-               "/xyz/openbmc_project/sensors/fan_pwm"}}};
+    "/xyz/openbmc_project/sensors/utilization"
+});
+
+auto thermalPaths = std::to_array<std::string_view>({
+    "/xyz/openbmc_project/sensors/fan_tach",
+    "/xyz/openbmc_project/sensors/temperature",
+    "/xyz/openbmc_project/sensors/fan_pwm"
+});
+
 } // namespace dbus
+// clang-format on
+
+using sensorPair = std::pair<std::string_view, std::span<std::string_view>>;
+static constexpr std::array<sensorPair, 3> paths = {
+    {{node::power, std::span<std::string_view>(dbus::powerPaths)},
+     {node::sensors, std::span<std::string_view>(dbus::sensorPaths)},
+     {node::thermal, std::span<std::string_view>(dbus::thermalPaths)}}};
 
 inline const char* toReadingType(const std::string& sensorType)
 {
@@ -181,8 +192,8 @@
 
     SensorsAsyncResp(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                      const std::string& chassisIdIn,
-                     const std::vector<const char*>& typesIn,
-                     const std::string_view& subNode) :
+                     std::span<std::string_view> typesIn,
+                     std::string_view subNode) :
         asyncResp(asyncResp),
         chassisId(chassisIdIn), types(typesIn), chassisSubNode(subNode),
         efficientExpand(false)
@@ -191,8 +202,8 @@
     // Store extra data about sensor mapping and return it in callback
     SensorsAsyncResp(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                      const std::string& chassisIdIn,
-                     const std::vector<const char*>& typesIn,
-                     const std::string_view& subNode,
+                     std::span<std::string_view> typesIn,
+                     std::string_view subNode,
                      DataCompleteCb&& creationComplete) :
         asyncResp(asyncResp),
         chassisId(chassisIdIn), types(typesIn), chassisSubNode(subNode),
@@ -203,7 +214,7 @@
     // sensor collections expand
     SensorsAsyncResp(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                      const std::string& chassisIdIn,
-                     const std::vector<const char*>& typesIn,
+                     const std::span<std::string_view> typesIn,
                      const std::string_view& subNode, bool efficientExpand) :
         asyncResp(asyncResp),
         chassisId(chassisIdIn), types(typesIn), chassisSubNode(subNode),
@@ -268,7 +279,7 @@
 
     const std::shared_ptr<bmcweb::AsyncResp> asyncResp;
     const std::string chassisId;
-    const std::vector<const char*> types;
+    const std::span<std::string_view> types;
     const std::string chassisSubNode;
     const bool efficientExpand;
 
@@ -452,7 +463,7 @@
         return;
     }
 
-    for (const char* type : sensorsAsyncResp->types)
+    for (std::string_view type : sensorsAsyncResp->types)
     {
         for (const std::string& sensor : *allSensors)
         {
@@ -2948,8 +2959,10 @@
                                  const std::string& node,
                                  SensorsAsyncResp::DataCompleteCb&& mapComplete)
 {
-    auto pathIt = sensors::dbus::paths.find(node);
-    if (pathIt == sensors::dbus::paths.end())
+    decltype(sensors::paths)::const_iterator pathIt =
+        std::find_if(sensors::paths.cbegin(), sensors::paths.cend(),
+                     [&node](auto&& val) { return val.first == node; });
+    if (pathIt == sensors::paths.cend())
     {
         BMCWEB_LOG_ERROR << "Wrong node provided : " << node;
         mapComplete(boost::beast::http::status::bad_request, {});
@@ -3026,8 +3039,7 @@
             {
                 // we perform efficient expand.
                 auto asyncResp = std::make_shared<SensorsAsyncResp>(
-                    aResp, chassisId,
-                    sensors::dbus::paths.at(sensors::node::sensors),
+                    aResp, chassisId, sensors::dbus::sensorPaths,
                     sensors::node::sensors,
                     /*efficientExpand=*/true);
                 getChassisData(asyncResp);
@@ -3040,8 +3052,7 @@
             // if there's no efficient expand available, we use the default
             // Query Parameters route
             auto asyncResp = std::make_shared<SensorsAsyncResp>(
-                aResp, chassisId,
-                sensors::dbus::paths.at(sensors::node::sensors),
+                aResp, chassisId, sensors::dbus::sensorPaths,
                 sensors::node::sensors);
 
             // We get all sensors as hyperlinkes in the chassis (this
@@ -3069,9 +3080,9 @@
             }
             BMCWEB_LOG_DEBUG << "Sensor doGet enter";
             std::shared_ptr<SensorsAsyncResp> asyncResp =
-                std::make_shared<SensorsAsyncResp>(aResp, chassisId,
-                                                   std::vector<const char*>(),
-                                                   sensors::node::sensors);
+                std::make_shared<SensorsAsyncResp>(
+                    aResp, chassisId, std::span<std::string_view>(),
+                    sensors::node::sensors);
 
             const std::array<const char*, 1> interfaces = {
                 "xyz.openbmc_project.Sensor.Value"};
diff --git a/redfish-core/lib/thermal.hpp b/redfish-core/lib/thermal.hpp
index 847d170..e58e86f 100644
--- a/redfish-core/lib/thermal.hpp
+++ b/redfish-core/lib/thermal.hpp
@@ -37,16 +37,8 @@
                     return;
                 }
 
-                auto thermalPaths =
-                    sensors::dbus::paths.find(sensors::node::thermal);
-                if (thermalPaths == sensors::dbus::paths.end())
-                {
-                    messages::internalError(asyncResp->res);
-                    return;
-                }
-
                 auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
-                    asyncResp, chassisName, thermalPaths->second,
+                    asyncResp, chassisName, sensors::dbus::thermalPaths,
                     sensors::node::thermal);
 
                 // TODO Need to get Chassis Redundancy information.
@@ -64,14 +56,6 @@
                     return;
                 }
 
-                auto thermalPaths =
-                    sensors::dbus::paths.find(sensors::node::thermal);
-                if (thermalPaths == sensors::dbus::paths.end())
-                {
-                    messages::internalError(asyncResp->res);
-                    return;
-                }
-
                 std::optional<std::vector<nlohmann::json>>
                     temperatureCollections;
                 std::optional<std::vector<nlohmann::json>> fanCollections;
@@ -79,7 +63,7 @@
                     allCollections;
 
                 auto sensorsAsyncResp = std::make_shared<SensorsAsyncResp>(
-                    asyncResp, chassisName, thermalPaths->second,
+                    asyncResp, chassisName, sensors::dbus::thermalPaths,
                     sensors::node::thermal);
 
                 if (!json_util::readJsonPatch(
