13 #include <boost/container/flat_map.hpp>
21 using Index = uint32_t;
28 template <
typename value_t>
29 using IndexMultimap = boost::container::flat_multimap<Index, value_t>;
36 template <
typename value_t>
38 const IndexMultimap<value_t>& multimap) {
39 using InverseMultimap = boost::container::flat_multimap<value_t, Index>;
42 typename InverseMultimap::sequence_type unordered;
43 unordered.reserve(multimap.size());
44 for (
auto&& [index, value] : multimap) {
46 unordered.emplace_back(value, index);
50 InverseMultimap inverse;
51 inverse.adopt_sequence(std::move(unordered));