From 16b84a06d8d4138a598f7241131019e719961e4e Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 9 Apr 2019 09:11:21 +0200 Subject: [PATCH] add equal_range override to map --- alib2std/src/extensions/container/map.hpp | 48 +++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/alib2std/src/extensions/container/map.hpp b/alib2std/src/extensions/container/map.hpp index d8b670d5b5..e82cbe5561 100644 --- a/alib2std/src/extensions/container/map.hpp +++ b/alib2std/src/extensions/container/map.hpp @@ -276,6 +276,54 @@ public: auto beginIter = std::move ( * this ).begin ( ); return ext::iterator_range < decltype ( endIter ) > ( beginIter, endIter ); } + + /** + * \brief + * Make range of elements with key equal to the @p key. + * + * \tparam K the key used in the query + * + * \param key the value used in the query + * + * \return selected range of elements + */ + template < class K > + auto equal_range ( K && key ) const & { + auto range = std::map < T, R, Cmp, Alloc >::equal_range ( std::forward < K > ( key ) ); + return ext::iterator_range < decltype ( range.first ) > ( range.first, range.second ); + } + + /** + * \brief + * Make range of elements with key equal to the @p key. + * + * \tparam K the key used in the query + * + * \param key the value used in the query + * + * \return selected range of elements + */ + template < class K > + auto equal_range ( K && key ) & { + auto range = std::map < T, R, Cmp, Alloc >::equal_range ( std::forward < K > ( key ) ); + return ext::iterator_range < decltype ( range.first ) > ( range.first, range.second ); + } + + /** + * \brief + * Make range of elements with key equal to the @p key. + * + * \tparam K the key used in the query + * + * \param key the value used in the query + * + * \return selected range of elements + */ + template < class K > + auto equal_range ( K && key ) && { + auto range = std::map < T, R, Cmp, Alloc >::equal_range ( std::forward < K > ( key ) ); + return ext::make_iterator_range ( make_map_move_iterator < T, R > ( range.first ), make_map_move_iterator < T, R > ( range.second ) ); + } }; /** -- GitLab