c++ - C++ 中是否有类似双端队列的位集?

标签 c++ vector boolean deque bitset

我正在尝试存储一个带有位过滤器的非常大的搜索掩码。

两者都是 std::vector<bool>std::bitset<n>将它们的 bool 表示存储为位,这与通常大小为 char 的普通 bool 不同。或 int32_t .

问题是这两种数据结构都将它们的元素存储在一个巨大的内存块中。操作系统因为请求太大的 block 而生我的气。一件事std::deque<bool>我认为是将它的元素存储在类似于链表的东西中。

现在我知道你不能在不移位的情况下使用指向单个位的指针,并且使用链表类型结构违背了内存保护的目的。但是你可以像 char[] 的 2gig block 一样存储。 ,使用移位设置各个位,然后链接指针指向另一个 2gb block ,你懂吗?

所以请告诉我这种类型的结构是否存在于某处或者是否可能。

最佳答案

我不知道您的问题有任何直接的解决方案,但可以通过自定义容器轻松解决。

一个解决方案将简单地涉及 std::bitset 的 std::deque。其中 bitset 的大小是 2 的幂,例如 256。有了这个,您可以获取索引并单独屏蔽 deque 索引和 bitset 索引:

std::deque< std::bitset<256> > ;
unsigned long long = 1500;

bool val = bigBitset[ index>>8 ][ index & 0xFF ];

为了方便,这也可以封装在一个类中:

class DequeBitset : public std::deque< std::bitset<256> >
{
public:
    struct Index
    {
        unsigned long index;

        unsigned long dequeIndex() const { return index>>8; }       
        unsigned long bitsetIndex() const { return index&0xFF; }
        Index( unsigned long index ) : index(index) {}
    };
public:

    bool operator[]( const Index& index )
    { return std::deque< std::bitset<256> >::operator [](index.dequeIndex())[ index.bitsetIndex() ]; }
};

int _tmain(int argc, _TCHAR* argv[])
{
    DequeBitset test;
    test.resize(10);
    bool val = test[259];
    return 0;
}

关于c++ - C++ 中是否有类似双端队列的位集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101703/

相关文章:

c++ - 以度而不是弧度计算三角函数

c++ - 作为用指针 : no error but strange behavior 定义的类的私有(private)成员的 vector

r - R 中的元素和多个向量

c++ - 如何在 vector 上调用不同的重写方法

javascript - 如何在 JavaScript 中检查 boolean HTML 属性的当前值?

java - Boolean/boolean 如何作为 Java 中 HashMap 的键?

C++程序设计

c++ - 如何使用 Make 构建与一些 C++ 代码混合的 C 项目?

c++ - HOG vector 包含负值

java - 在 Java/Android 中从哈希表中的对象分配 boolean 值