sandbox
Loading...
Searching...
No Matches
multimap_key_range.hpp
1#ifndef LIBSBX_UTILITY_MULTIMAP_KEY_RANGE_HPP_
2#define LIBSBX_UTILITY_MULTIMAP_KEY_RANGE_HPP_
3
4#include <utility>
5#include <tuple>
6#include <concepts>
7#include <type_traits>
8
9namespace sbx::utility {
10
11template<typename Map>
12concept multimap = requires {
13 typename Map::key_type;
14 typename Map::iterator;
15 typename Map::const_iterator;
16} && requires(Map& map, const Map::key_type& key) {
17 { map.equal_range(key) };
18};
19
20template<multimap Map>
22
23public:
24
25 using key_type = typename Map::key_type;
26 using iterator = std::conditional_t<std::is_const_v<Map>, typename Map::const_iterator, typename Map::iterator>;
27
28 multimap_key_range(Map& range, const key_type& key) {
29 std::tie(_begin, _end) = range.equal_range(key);
30 }
31
32 auto begin() -> iterator {
33 return _begin;
34 }
35
36 auto end() -> iterator {
37 return _end;
38 }
39
40private:
41
42 iterator _begin;
43 iterator _end;
44
45};
46
47} // namespace sbx::utility
48
49#endif // LIBSBX_UTILITY_MULTIMAP_KEY_RANGE_HPP_
Definition: multimap_key_range.hpp:21