私は寄木細工のファイル形式を扱っています。例えば:
データのグループ:
1 2ヌル3 4 5 6ヌル7 8ヌル ヌル9 10 11 12 13 14
null 要素を示すビット ベクトルを取得しました。
1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1
null 以外の要素のみを保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
述語を評価したい: big then 5
非 null 要素を 5 と比較し、ビット ベクトルを取得しました。
0 0 0 0 0 1 1 1 1 1 1 1 1
すべての要素のビット ベクトルを取得したい:
0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 1
太字の 0 は null 要素です。false にする必要があります。
void IntersectBitVec(vector<int64_t>& bit_vec, vector<int64_t>& sub_bit_vec) {
int data_idx = 0,
int bit_idx = 63;
for (int i = 0; i < bit_vec.size(); ++i) {
for (int j = 63; j >=0; --j) {
if (bit_vec[i] & 0x01 << j) {
if (!(sub_bit_vec[data_idx] & 0x01 << bit_idx)) {
bit_vec[i] &= ~(0x01 << j);
}
if (--bit_idx < 0) {
--data_idx;
bit_idx = 63;
}
}
}
}}
私のコードはかなり醜いです。とにかく速くする方法はありますか? まことにありがとうございます!