/* OctaSTD extensions for std::unordered_map. * * This file is part of OctaSTD. See COPYING.md for futher information. */ #ifndef OSTD_UNORDERED_MAP_HH #define OSTD_UNORDERED_MAP_HH #include #include "ostd/range.hh" namespace ostd { template struct ranged_traits> { using Range = IteratorRange::iterator>; static Range iter(std::unordered_map &v) { return Range{v.begin(), v.end()}; } }; template struct ranged_traits const> { using Range = IteratorRange::const_iterator>; static Range iter(std::unordered_map const &v) { return Range{v.cbegin(), v.cend()}; } }; template inline std::unordered_map make_unordered_map(R range) { std::unordered_map ret; for (; !range.empty(); range.pop_front()) { ret.emplace(range.front()); } return ret; } template inline std::unordered_map< typename RangeValue::first_type, typename RangeValue::second_type > make_unordered_map(R &&range) { return make_unordered_map< typename RangeValue::first_type, typename RangeValue::second_type >(std::forward(range)); } } /* namespace ostd */ #endif