From 05e0a22fb31e02be5e93054aa330d077c7d0bfbc Mon Sep 17 00:00:00 2001 From: Terens <37905314+TerensTare@users.noreply.github.com> Date: Thu, 31 Jul 2025 08:29:44 -0400 Subject: [PATCH] dense_map: transparent lookup for `at` (#1270) --- src/entt/container/dense_map.hpp | 18 ++++++++++++++++++ test/entt/container/dense_map.cpp | 3 +++ 2 files changed, 21 insertions(+) diff --git a/src/entt/container/dense_map.hpp b/src/entt/container/dense_map.hpp index 73733c1df..47981f3e5 100644 --- a/src/entt/container/dense_map.hpp +++ b/src/entt/container/dense_map.hpp @@ -725,6 +725,24 @@ public: return it->second; } + /*! @copydoc at */ + template + [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> + at(const Other &key) const { + auto it = find(key); + ENTT_ASSERT(it != cend(), "Invalid key"); + return it->second; + } + + /*! @copydoc at */ + template + [[nodiscard]] std::enable_if_t && is_transparent_v, std::conditional_t> + at(const Other &key) { + auto it = find(key); + ENTT_ASSERT(it != end(), "Invalid key"); + return it->second; + } + /** * @brief Accesses or inserts a given element. * @param key A key of an element to find or insert. diff --git a/test/entt/container/dense_map.cpp b/test/entt/container/dense_map.cpp index 743d97242..7fdb00a3f 100644 --- a/test/entt/container/dense_map.cpp +++ b/test/entt/container/dense_map.cpp @@ -66,6 +66,9 @@ TEST(DenseMap, Functionalities) { map.emplace(0, 0); + ASSERT_EQ(map.at(0), 0); // regular key lookup + ASSERT_EQ(map.at(0.0), 0); // transparent key lookup + ASSERT_EQ(map.count(0), 1u); ASSERT_EQ(map.count(6.4), 0u); ASSERT_EQ(cmap.count(0.0), 1u);