Como faço para criar um vetor de bitmasks que basicamente substitui um vetor booleano no C ++ 11?

Jan 23 2021

Estou tentando criar um vetor de bitmasks para armazenar valores verdadeiros / falsos que vão me dizer se o índice específico de valor em outro vetor precisa ser impresso ou não.

por exemplo: std::vector<int> a ;b é um vetor de bitmasks que irá armazenar valores de flag que correspondem ao vetor inteiro a e esta flag me diz se aquele valor particular no índice correspondente precisa ser impresso ou não.

a {1,2,3}  
b { true, false ,true} // I need a similar bitmask which would help me print 1 and 3 

essa tarefa pode ser realizada de outras maneiras - o problema no qual estou trabalhando requer o uso de bitmask. Agradeço antecipadamente por me ajudar com isso.

Respostas

Pat.ANDRIA Jan 23 2021 at 18:11

Como muitos já sugeriram, eu teria feito assim:

  • myBitsetvai manter as bandeiras. 1(definir) para a bandeira de impressão e 0(limpar) para a bandeira não impressa
#include <bitset>
#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char** argv){

  std::vector<int> a {1,2,3,4,5,6,7,8,9,10};

  std::bitset<10> myBitset;

  myBitset.set(3);             // set fourth bit  ==> display 4
  myBitset.set(6);             // set seventh bit ==> display 7
  myBitset[8] = true;          // set nineth bit ==> display 9
  myBitset[9] = myBitset[3];   // set 10th bit ==> display 10

  std::cout << "Mybitset" << myBitset << endl;

  for (int i=0; i<a.size(); i++)
  {
      if (myBitset.test(i))
      {
          std::cout << a.at(i);
      }
  }

  return (0);
}

A saída seria:

1101001000
47910