/** Return true if \p bv1 i less than \p bv2 Lexicographical order, with bit vectors written LSB first. \param[in] bv1 A bit vector \param[in] bv2 Another bit vector \return true if equal, false otherwise */ bool operator< (const OBBitVec & bv1, const OBBitVec & bv2) { bool rtn = false; int next_bit_1 = bv1.NextBit(-1); int next_bit_2 = bv2.NextBit(-1); bool should_continue = true; while (should_continue) { should_continue = false; if (next_bit_1 == -1) rtn = (next_bit_2 == -1 ? false : true); else if (next_bit_2 == -1) rtn = false; else if (next_bit_2 < next_bit_1) rtn = true; else if (next_bit_1 < next_bit_2) rtn = false; else { next_bit_1 = bv1.NextBit(next_bit_1); next_bit_2 = bv2.NextBit(next_bit_2); should_continue = true; } } return rtn; }