Problems using a map with a bitset as a key
Just use your own comparator class:
struct Comparer {
bool operator() (const bitset<8> &b1, const bitset<8> &b2) const {
return b1.to_ulong() < b2.to_ulong();
}
};
/* ... */
map <bitset<8> , int, Comparer> mymap;
Note that you can extend this solution to support arbitrary length bitsets, as long as they are small enough to be converted to an unsigned long:
template<size_t sz> struct bitset_comparer {
bool operator() (const bitset<sz> &b1, const bitset<sz> &b2) const {
return b1.to_ulong() < b2.to_ulong();
}
};
map <bitset<8> , int, bitset_comparer<8> > mymap;
map <bitset<16> , int, bitset_comparer<16> > mymap16;
An alternative solution would be to simply use an unordered_map
, if this still meets your requirements.
This could be std::unordered_map<bitset<N>, T>
or boost::unordered_map<bitset<N>, T>
, depending on C++ version or performance considerations.
This avoids the need for comparison and may prove faster, depending on requirements.