Search code examples
c++boosthashunordered-mapbitset

Unordered (hash) map from bitset to bitset on boost


I want to use a cache, implemented by boost's unordered_map, from a dynamic_bitset to a dynamic_bitset. The problem, of course, is that there is no default hash function from the bitset. It doesn't seem to be like a conceptual problem, but I don't know how to work out the technicalities. How should I do that?


Solution

  • I found an unexpected solution. It turns out boost has an option to #define BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS. When this is defined, private members including m_bits become public (I think it's there to deal with old compilers or something).

    So now I can use @KennyTM's answer, changed a bit:

    namespace boost {
        template <typename B, typename A>
        std::size_t hash_value(const boost::dynamic_bitset<B, A>& bs) {            
            return boost::hash_value(bs.m_bits);
        }
    }