27 #ifndef CEREAL_TYPES_UNORDERED_MAP_HPP_
28 #define CEREAL_TYPES_UNORDERED_MAP_HPP_
30 #include <cereal/cereal.hpp>
31 #include <unordered_map>
35 namespace unordered_map_detail
37 template <
class Archive,
class MapT>
inline
38 void save( Archive & ar, MapT
const & map )
40 ar( make_size_tag( map.size() ) );
42 for(
const auto & i : map )
43 ar( make_map_item(i.first, i.second) );
46 template <
class Archive,
class MapT>
inline
47 void load( Archive & ar, MapT & map )
50 ar( make_size_tag( size ) );
55 for(
size_t i = 0; i < size; ++i )
57 typename MapT::key_type key;
58 typename MapT::mapped_type value;
60 ar( make_map_item(key, value) );
61 map.insert( {key, value} );
67 template <
class Archive,
class K,
class T,
class H,
class KE,
class A>
inline
68 void save( Archive & ar, std::unordered_map<K, T, H, KE, A>
const & unordered_map )
70 unordered_map_detail::save( ar, unordered_map );
74 template <
class Archive,
class K,
class T,
class H,
class KE,
class A>
inline
75 void load( Archive & ar, std::unordered_map<K, T, H, KE, A> & unordered_map )
77 unordered_map_detail::load( ar, unordered_map );
81 template <
class Archive,
class K,
class T,
class H,
class KE,
class A>
inline
82 void save( Archive & ar, std::unordered_multimap<K, T, H, KE, A>
const & unordered_multimap )
84 unordered_map_detail::save( ar, unordered_multimap );
88 template <
class Archive,
class K,
class T,
class H,
class KE,
class A>
inline
89 void load( Archive & ar, std::unordered_multimap<K, T, H, KE, A> & unordered_multimap )
91 unordered_map_detail::load( ar, unordered_multimap );
95 #endif // CEREAL_TYPES_UNORDERED_MAP_HPP_