diff --git a/source/mijin/container/vector_map.hpp b/source/mijin/container/vector_map.hpp index 0c3e6ef..a675e48 100644 --- a/source/mijin/container/vector_map.hpp +++ b/source/mijin/container/vector_map.hpp @@ -4,6 +4,7 @@ #if !defined(MIJIN_CONTAINER_VECTOR_MAP_HPP_INCLUDED) #define MIJIN_CONTAINER_VECTOR_MAP_HPP_INCLUDED 1 +#include #include #include #include "./boxed_object.hpp" @@ -140,6 +141,16 @@ public: { return at(key); } + + TValue& operator[](TKey&& key) + { + auto it = find(key); + if (it != end()) + { + return it->second; + } + return emplace(std::move(key), TValue()).first->second; + } [[nodiscard]] iterator begin() MIJIN_NOEXCEPT { return {keys_.data(), values_.data()}; } @@ -234,6 +245,7 @@ public: return eraseImpl(idx, count); } + [[nodiscard]] iterator find(const TKey& key) MIJIN_NOEXCEPT { for (std::size_t idx = 0; idx < keys_.size(); ++idx) @@ -246,6 +258,7 @@ public: return end(); } + [[nodiscard]] const_iterator find(const TKey& key) const MIJIN_NOEXCEPT { for (std::size_t idx = 0; idx < keys_.size(); ++idx) @@ -257,6 +270,12 @@ public: } return end(); } + + [[nodiscard]] + bool contains(const TKey& key) const MIJIN_NOEXCEPT + { + return std::ranges::contains(keys_, key); + } private: iterator eraseImpl(std::ptrdiff_t idx, std::ptrdiff_t count = 1) MIJIN_NOEXCEPT {