Как использовать правильно bitset
Не могу понять, что делает данный код:
bitset<365> x[365];
int intersection(int i, int j) {
return (x[i] & x[j]).count();
}
У меня есть битсет на 365 битов и я ожидаю, что могу включать или выключать в нем какие-то биты и я ХОТЕЛ бы иметь возможность сравнивать его с другими битовыми масками.. будь то число или другой битсет.
А что происходит в intersection? Каким образом мне каких-то два числа переданных в аргументы могут дать информацию о пересечении битов? Что они вообще дают и почему я достаю эти числа по индексу с битсета?
Ноль идей что происходит.
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
- Объявлен массив из 365 битовых множеств в 365 битов.
- Функция возвращает количеством единиц в битовом множестве, полученное в результате операции логического "и"
i_тогомножества сj_томмножестве. ( Поскольку ничего не инициализировано, то все биты будут нулями, и результат будет нулем.
P.S. может быть вы хотели
int intersection(const int i, const int j) {
std::bitset<365> b1(i),
b2(j);
return (b1 & b2).count();
}
или
int intersection(const std::bitset<365>& i, const std::bitset<365>& j) {
return (i & j).count();
}
или и их перегрузку?...