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