Как использовать правильно bitset

Не могу понять, что делает данный код:

bitset<365> x[365];
int intersection(int i, int j) {
  return (x[i] & x[j]).count();
}

У меня есть битсет на 365 битов и я ожидаю, что могу включать или выключать в нем какие-то биты и я ХОТЕЛ бы иметь возможность сравнивать его с другими битовыми масками.. будь то число или другой битсет.

А что происходит в intersection? Каким образом мне каких-то два числа переданных в аргументы могут дать информацию о пересечении битов? Что они вообще дают и почему я достаю эти числа по индексу с битсета?

Ноль идей что происходит.


Ответы (1 шт):

Автор решения: AR Hovsepyan
  1. Объявлен массив из 365 битовых множеств в 365 битов.
  2. Функция возвращает количеством единиц в битовом множестве, полученное в результате операции логического "и" 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();
}

или и их перегрузку?...

→ Ссылка