Каков наиболее оптимизированный способ реализации оператора <
для std::bitset
, соответствующего сравнению целочисленного представления без знака (он должен работать для битов в more than 64 bits
)?
Тривиальная реализация:
template<std::size_t N>
bool operator<(const std::bitset<N>& x, const std::bitset<N>& y)
{
for (int i = N-1; i >= 0; i--) {
if (x[i] && !y[i]) return false;
if (!x[i] && y[i]) return true;
}
return false;
}
Когда я говорю "наиболее оптимизированный способ", я ищу реализации с использованием побитовых операций и трюков метапрограммирования (и тому подобное).
EDIT: Я думаю, что нашел трюк: метапрограммирование шаблона для рекурсии времени компиляции и правильного битового сдвига, чтобы сравнить биты как несколько целых чисел без знака. Но нет ясного представления о том, как это сделать...