34781Fermer34783
WarptenLe 07/09/2018 à 00:08
namespace std { template <typename Key, typename T, typename Hash = hash<Key>, typename KeyEqual = equal_to<Key>, template <typename> typename Allocator = allocator> struct map_traits { using allocator_t = Allocator<pair<const Key, T>>; using value_allocator = Allocator<T>; }; namespace { template <typename Key, typename T, typename U = T, typename... Ts> auto to_u_vector(std::unordered_map<Key, T, Ts...> const& map) { using map_traits_t = map_traits<Key, T, Ts...>; using vector_type = vector<T, typename map_traits_t::value_allocator>; auto mutator = [](pair<const Key, T> const& kv) -> U { return std::get<U>(kv); }; auto itr = boost::make_transform_iterator(map.begin(), mutator); auto end = boost::make_transform_iterator(map.end(), mutator); vector_type range(itr, end); return range; } } template <typename Key, typename T, typename... Ts> inline auto to_value_vector(std::unordered_map<Key, T, Ts...> const& map) { return to_u_vector<T>(map); } template <typename Key, typename T, typename... Ts> inline auto to_key_vector(std::unordered_map<Key, T, Ts...> const& map) { return to_u_vector<Key>(map); } }