aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd/kstd/flat_map.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/kstd/kstd/flat_map.hpp')
-rw-r--r--libs/kstd/kstd/flat_map.hpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/libs/kstd/kstd/flat_map.hpp b/libs/kstd/kstd/flat_map.hpp
index f3cf827a..e140f7dd 100644
--- a/libs/kstd/kstd/flat_map.hpp
+++ b/libs/kstd/kstd/flat_map.hpp
@@ -1121,6 +1121,13 @@ namespace kstd
key_compare m_comparator;
};
+ template<typename EKeyType, typename EMappedType, typename EKeyCompare, typename EKeyContainerType,
+ typename EMappedContainerType, typename Predicate>
+ constexpr auto friend erase_if(
+ flat_map<EKeyType, EMappedType, EKeyCompare, EKeyContainerType, EMappedContainerType> & map,
+ Predicate predicate)
+ -> flat_map<EKeyType, EMappedType, EKeyCompare, EKeyContainerType, EMappedContainerType>::size_type;
+
constexpr auto do_sort() -> void
{
auto zipped = std::views::zip(m_containers.keys, m_containers.values);
@@ -1161,6 +1168,22 @@ namespace kstd
-> flat_map<typename KeyContainer::value_type, typename MappedContainer::value_type, Compare, KeyContainer,
MappedContainer>;
+ template<typename KeyType, typename MappedType, typename KeyCompare, typename KeyContainerType,
+ typename MappedContainerType, typename Predicate>
+ constexpr auto erase_if(flat_map<KeyType, MappedType, KeyCompare, KeyContainerType, MappedContainerType> & map,
+ Predicate predicate)
+ -> flat_map<KeyType, MappedType, KeyCompare, KeyContainerType, MappedContainerType>::size_type
+ {
+ auto zipped = std::views::zip(map.m_containers.keys, map.m_containers.values);
+ auto removed = std::ranges::remove_if(zipped, predicate, [](auto const & e) {
+ return
+ typename flat_map<KeyType, MappedType, KeyCompare, KeyContainerType, MappedContainerType>::const_reference{e};
+ });
+ auto count = removed.size();
+ map.erase(map.end() - count, map.end());
+ return count;
+ }
+
} // namespace kstd
#endif \ No newline at end of file